符号なし整数クラスを作成しようとしています。
public class UnsignedInteger extends Number implements Comparable<UnsignedInteger>
{
...
}
次のような演算子を実装する方法はありますか。+、-、*、/、<<、>>、|、^、>>>、<<
Javaは演算子のオーバーロードをサポートしていません。唯一のオプションは、、、などのメソッドを定義し、add()
そこにロジックを記述して、特定の操作のためにそれらを呼び出すことです。subtract()
multiply()
BigIntegerクラスを見て、さまざまな操作をサポートするメソッドを定義する方法を理解できます。また、興味があれば、 jdkホームディレクトリのsrcフォルダにあるソースコードを確認することもできます。
演算子をオーバーロードできないという答えはすでに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
を拡張する必要があります(ただし、可能です)。
いいえ、Javaで演算子をオーバーライドすることはできません。
Javaでは演算子をオーバーライドすることはできません。できることは、標準ライブラリのBigDecimalやBigIntegerのように、操作を表すメソッドを定義することです。
「 Java-OO 」と呼ばれるjavac-plugin(Lombokのようなアノテーションプロセッサ)があり、これはJavaに演算子のオーバーロードを追加します。
これにより、演算子のオーバーロードを独自のクラスに非常に簡単に追加できます。これに加えて、Java APIの組み込みクラスの多くは、このプラグインを使用する際の演算子のオーバーロードもサポートしています。 (例:list.get(6)またはmap.get( "hello")の代わりに、list[6]およびmap["hello"]を実行できます)
javacでコンパイルするときに、クラスパスに.jarを含めるだけです。
Eclipse、Netbeans、IntelliJIDEAなどのすべての主要なIDE用のプラグインがあります。
いいえ。Javaは演算子のオーバーロードをサポートしていません。
Javaは演算子のオーバーロードをサポートしていません。オーバーロードし、クラスの演算子であることを知っているので、これは悪い習慣だと考えて+
います+=
。String