请您能告诉我是否有可能在Java中重载操作符?如果它在Java中被使用,你能告诉我它是什么吗?
当前回答
或者,您可以将Java编写为Groovy并重载这些函数来实现您想要的功能
//plus() => for the + operator
//multiply() => for the * operator
//leftShift() = for the << operator
// ... and so on ...
class Fish {
def leftShift(Fish fish) {
print "You just << (left shifted) some fish "
}
}
def fish = new Fish()
def fish2 = new Fish()
fish << fish2
谁不想成为/使用groovy呢?: D
不,你不能以同样的方式在Java中使用编译好的groovy jar。对于Java来说,这仍然是一个编译错误。
其他回答
操作符重载在Java中用于String类型的连接:
String concat = "one" + "two";
但是,您不能定义自己的操作符重载。
可以尝试Java操作符重载。它有自己的局限性,但如果您真的想使用操作符重载,那么值得一试。
正如许多人回答的那样:Java不支持用户定义的操作符重载。
也许这是跑题了,但我想评论一下我在一些回答中读到的一些东西。
可读性。 比较:
C = a + b C = a.add(b)
看一遍! 哪个更有可读性?
允许创建用户定义类型的编程语言应该允许它们以与内置类型(或基本类型)相同的方式工作。
所以Java打破了泛型编程的基本原则: 我们应该能够将内置类型的对象与用户定义类型的对象交换。 (你可能会想:“他说的是‘内置对象’吗?”是的,请看这里。)
关于字符串连接:
数学家用符号+表示集合上的交换运算。 所以我们可以确定a + b = b + a。 字符串连接(在大多数编程语言中)不尊重这种常见的数学符号。
答:=“你好”; B:= "world"; C:= (a + b = b + a);
或在爪哇:
字符串a = "hello"; 字符串b = "world"; Boolean c = (a + b).equals(b + a);
额外的: 注意在Java中相等和标识是如何混淆的。 ==(相等)符号表示: a.基本类型的相等性。 b.用户定义类型的标识符检查,因此,我们被迫使用equals()函数来表示相等。 但是…这与操作符重载有什么关系? 如果语言允许操作符重载,用户可以赋予相等操作符适当的含义。
或者,您可以将Java编写为Groovy并重载这些函数来实现您想要的功能
//plus() => for the + operator
//multiply() => for the * operator
//leftShift() = for the << operator
// ... and so on ...
class Fish {
def leftShift(Fish fish) {
print "You just << (left shifted) some fish "
}
}
def fish = new Fish()
def fish2 = new Fish()
fish << fish2
谁不想成为/使用groovy呢?: D
不,你不能以同样的方式在Java中使用编译好的groovy jar。对于Java来说,这仍然是一个编译错误。
您自己不能这样做,因为Java不允许操作符重载。
然而,有一个例外。String对象的+和+=重载。
推荐文章
- 在流中使用Java 8 foreach循环移动到下一项
- 访问限制:'Application'类型不是API(必需库rt.jar的限制)
- 用Java计算两个日期之间的天数
- 如何配置slf4j-simple
- 在Jar文件中运行类
- 带参数的可运行?
- 我如何得到一个字符串的前n个字符而不检查大小或出界?
- 我可以在Java中设置enum起始值吗?
- Java中的回调函数
- c#和Java中的泛型有什么不同?和模板在c++ ?
- 在Java中,流相对于循环的优势是什么?
- Jersey在未找到InjectionManagerFactory时停止工作
- 在Java流是peek真的只是调试?
- Recyclerview不调用onCreateViewHolder
- 将JSON字符串转换为HashMap