10

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

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

有没有办法实现运算符,例如;+、-、*、/、<<、>>、|、^、>>>、<<

4

7 回答 7

21

Java 不支持运算符重载。您唯一的选择是定义方法,如add(), subtract(),multiply()等,并在那里编写逻辑,并为特定操作调用它们。

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

于 2013-02-12T14:16:08.610 回答
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的.

于 2013-02-12T14:28:17.253 回答
4

不,您不能覆盖 Java 中的运算符。

于 2013-02-12T14:15:48.943 回答
4

在 Java 中无法覆盖运算符。您可以做的是定义表示操作的方法,例如标准库中的BigDecimalBigInteger

于 2013-02-12T14:17:21.813 回答
3

有一个名为“ Java-OO ”的 javac-plugin(像 Lombok 这样的注释处理器),它为 Java 添加了运算符重载。

它允许您非常轻松地将运算符重载添加到您自己的类中。除此之外,Java API 的许多内置类在使用此插件时也支持运算符重载。 (例如:你可以用 list[6] 和 map["hello"] 代替 list.get(6) 或 map.get("hello"))

您需要做的就是在使用 javac 编译时将 .jar 包含在类路径中。

所有主要 IDE 都有插件:Eclipse、Netbeans 和 IntelliJ IDEA。

于 2016-03-18T02:31:43.420 回答
2

不,Java 不支持运算符重载。

于 2013-02-12T14:16:08.187 回答
2

Java 不支持运算符重载,他们认为这是一种不好的做法,因为他们知道它们为类重载++=运算符String

于 2013-02-12T14:18:58.957 回答