如何在Java类中实现操作符

时间:2013-02-12 14:14:55

标签: java operators

我正在尝试创建一个无符号整数类。

public class UnsignedInteger extends Number implements Comparable<UnsignedInteger> 
    { 
    ... 
    }

有没有办法实现运营商,如; +, - ,*,/,&lt;&lt;,&gt;&gt ;, |,^,&gt;&gt;&gt;,&lt;&lt;

7 个答案:

答案 0 :(得分:17)

Java does not support Operator Overloading。您唯一的选择是定义add()subtract()multiply()等方法,并在那里编写逻辑,然后调用它们进行特定操作。

您可以查看BigInteger类,了解如何定义支持各种操作的方法。如果有兴趣,您甚至可以浏览源代码,您可以在 jdk 主目录的 src 文件夹中找到它。

答案 1 :(得分:8)

已经有5个答案说你不能重载操作符,但我想指出你根本不能在对象上使用算术运算符。它们仅适用于基本类型(intdouble等)。

以下代码编译的唯一原因

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中覆盖运算符。您可以做的是定义表示操作的方法,例如标准库中的BigDecimalBigInteger

答案 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运算符超载了