我正在尝试创建一个无符号整数类。
public class UnsignedInteger extends Number implements Comparable<UnsignedInteger>
{
...
}
有没有办法实现运营商,如; +, - ,*,/,&lt;&lt;,&gt;&gt ;, |,^,&gt;&gt;&gt;,&lt;&lt;
答案 0 :(得分:17)
Java does not support Operator Overloading。您唯一的选择是定义add()
,subtract()
,multiply()
等方法,并在那里编写逻辑,然后调用它们进行特定操作。
您可以查看BigInteger类,了解如何定义支持各种操作的方法。如果有兴趣,您甚至可以浏览源代码,您可以在 jdk 主目录的 src 文件夹中找到它。
答案 1 :(得分:8)
已经有5个答案说你不能重载操作符,但我想指出你根本不能在对象上使用算术运算符。它们仅适用于基本类型(int
,double
等)。
以下代码编译的唯一原因
Integer a = 1, b = 2;
Integer c = a + b;
是因为Java编译器将其编译为
Integer a = Integer.valueOf(1), b = Integer.valueOf(2);
Integer c = Integer.valueOf(a.intValue() + b.intValue());
如果您希望这适用于UnsignedInteger
,则必须扩展 javac (尽管如此)。
答案 2 :(得分:4)
不,你不能用Java覆盖运算符。
答案 3 :(得分:4)
无法在Java中覆盖运算符。您可以做的是定义表示操作的方法,例如标准库中的BigDecimal或BigInteger。
答案 4 :(得分:4)
有一个名为&#34; Java-OO&#34;的javac-plugin(像Lombok这样的注释处理器),它将运算符重载添加到Java。
它允许您非常轻松地将操作符重载添加到您自己的类中。除此之外,Java API的许多内置类在使用此插件时也支持运算符重载。 (例如:代替list.get(6)或map.get(&#34; hello&#34;)你可以列表[6]并映射[&#34;你好&#34;])< / em>的
您需要做的就是在使用javac进行编译时在类路径中包含.jar。
所有主要IDE都有插件:Eclipse,Netbeans和IntelliJ IDEA。
答案 5 :(得分:2)
没有。 Java不支持运算符重载。
答案 6 :(得分:2)
Java不支持运算符重载,他们认为这是一种不好的做法,因为他们知道+
类的+=
和String
运算符超载了