25

作成したクラスにオートボクシングを使用する方法はありますか? たとえば、次のサブクラスがありNumberます。

public class UnsignedInteger extends Number {
    int n;

    public UnsignedInteger(int n) {
        if(n >= 0)
            this.n = n;
        else
            throw new IllegalArgumentException("Only positive integers are supported");
    }
}

今、UnsignedInteger i = new UnsignedInteger(88);完全に正常に動作しますが、これをコンパイルする方法はありますUnsignedInteger i = 88;か? それは私にはありません。前もって感謝します!

4

4 に答える 4

20

要するに、いいえ。それをコンパイルする方法はありません。

Java は、事前定義されたボクシング変換の限られたセットのみを定義します。

JLS のセクション 5.1.7から:

ボックス変換は、プリミティブ型の式を参照型の対応する式に変換します。具体的には、次の 9 つの変換をボクシング変換と呼びます。

  • ブール型からブール型へ

  • バイト型からバイト型へ

  • ショートタイプからショートタイプへ

  • char型からCharacter型へ

  • int型からInteger型へ

  • ロングタイプからロングタイプへ

  • フロート型からフロート型へ

  • double型からdouble型へ

  • null型からnull型へ

さらに、この変換を実行するために演算子をオーバーロードすることを考えるかもしれませんが=、これが可能な C++ とは異なり、演算子のオーバーロードは Java ではサポートされていません。

したがって、Java では変換できません。

于 2013-07-12T16:39:40.233 に答える
1

要するに:いいえ、それは不可能です。これが機能するには、Java では使用できない演算子のオーバーロードが必要です。リンクを参照してください。

于 2013-07-13T06:44:37.890 に答える