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());

これを自分で機能させたい場合は、 javacUnsignedIntegerを拡張する必要があります(ただし、可能です)。

于 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.get(6)またはmap.get( "hello")の代わりに、list[6]およびmap["hello"]を実行できます)

javacでコンパイルするときに、クラスパスに.jarを含めるだけです。

Eclipse、Netbeans、IntelliJIDEAなどのすべての主要なIDE用のプラグインがあります。

于 2016-03-18T02:31:43.420 に答える
2

いいえ。Javaは演算子のオーバーロードをサポートしていません。

于 2013-02-12T14:16:08.187 に答える
2

Javaは演算子のオーバーロードをサポートしていません。オーバーロードし、クラスの演算子であることを知っているので、これは悪い習慣だと考えて+います+=String

于 2013-02-12T14:18:58.957 に答える