Javaのプリミティブ型の宣伝について質問があります。次の例でわかるように、型不一致のエラーのためにメソッドの1つがコンパイルされません。各メソッドは同じ値を返しますが、異なる型を返します。プリミティブ型のプロモーション
プリミティブlong
のバージョンはエラーなしで動作し、ラッパークラスLong
のバージョンは失敗します。これは、return
ステートメントのint
リテラルが、より広範なプリミティブタイプ(たとえばlong
)に、次に対応するラッパークラスInteger
などにプロモートされるためです。 Integer
はLong
のサブクラスではないので、コンパイラはエラーを返します。
ラッパークラスByte
のバージョンは何故エラーなく動作しますか?この時点でコンパイラは正確に何をしますか?
long getPrimitiveLong() {
return 12; // valid
}
Long getWrapperLong() {
return 12; // Error: type mismatch
}
Byte getWrapperByte() {
return 12; // valid
}
'getWrapperLong'に対して' return 12L; 'を試したことがありますか?それは私のために働くようです。 – OldCurmudgeon
はい、12Lまたは(長い)12で動作します。 –