71208


環境：android studio 4.x  
api：28

JAVA には、プリミティブ型の int のラッパークラス Integer（参照型）
がありますが、このラッパークラスを使用すると、オートボクシング機能？で、以下のコードを記載してもプリミティブ型／参照型への双方向変換が自動で行われ、ビルドエラーは発生しません。（認識違いがあるかもしれませんが。。。）

[code]

    Integer v0 = 1;
    int v1 = new Integer(1);
    
[/code]

そこで、質問なのですが、以下のように Number クラスを継承した Int32
ラッパークラスを作成してみたのですが、オートボクシング機能が働かないようなのです。そもそも自作クラスにオートボクシング機能を利用することはできないのでしょうか？もしくは使い方が間違っているのでしょうか？（Nummberクラスを継承すれば何かしらオートボクシングが勝手に働くことを期待していました。。。）

[code]

    class Int32 extends Number {
        int value;
        public Int32(int value){
            this.value = value;
        }
        @Override
        public int intValue() {
            return (int)value;
        }
        @Override
        public long longValue() {
            return (long)value;
        }
        @Override
        public float floatValue() {
            return (float)value;
        }
        @Override
        public double doubleValue() {
            return (double)value;
        }
    }
    Int32 i32 = 0; // <--- ここでエラーが発生する
    
[/code]

JAVA初心者のため認識違いがあるかもしれませんが、宜しくお願いします。


CC BY-SA 4.0
2020-10-15T03:02:45.600
71206
2020-10-15T03:45:35.160
13909
question
java
java のラッパクラス(Integer等)について質問です


ボクシング対象はJavaの言語仕様で限定されていて自分で追加できません。  
[JLS15 5.1.7. Boxing
Conversion](https://docs.oracle.com/javase/specs/jls/se15/html/jls-5.html#jls-5.1.7)
に書かれています。

> Boxing conversion treats expressions of a primitive type as expressions of a
> corresponding reference type. Specifically, the following nine conversions
> are called the boxing conversions:
>
>   * From type boolean to type Boolean
>   * From type byte to type Byte
>   * From type short to type Short
>   * From type char to type Character
>   * From type int to type Integer
>   * From type long to type Long
>   * From type float to type Float
>   * From type double to type Double
>   * From the null type to the null type
>


CC BY-SA 4.0
2020-10-15T03:45:35.160
71208
2020-10-15T03:45:35.160
241
71206
answer