スタックオーバーフロー :
私は、以下のプログラムがあります。
class MyGenClass{
public <T> void setAge(T ageParam){
Integer age = ageParam;
}
}
class Program{
public static void main(String args[]){
MyGenClass gnClass = new MyGenClass();
gnClass.<Integer>setAge(80);
}
}
実際に、私は合格していますInteger
なぜ、その後にageParam
に割り当てられていませんage
。そして、ときに私が行います。
class MyGenClass{
public <T> void setAge(T ageParam){
T age = ageParam;
}
}
ジェネリック型変数が割り当てられていないのはなぜInteger
型変数age
実際にジェネリック型変数がageParam
ありますInteger
。この義務は、ということであるageParam
タイプのものであり、変数に割り当てる必要がありますかT
?この背後にシナリオをいただきましたか!?
ニコラス:
タイプがあることがあり保証されていないT
と互換性がありますInteger
。それを明確にするために、あなたはどこ次のアプローチを使用する必要がありますT
のサブタイプになりますInteger
。
public <T extends Integer> void setAge(T ageParam){
age = ageParam;
}
しかし、私はこの上のない点を見ません。変動のために、以下のアプローチを考えてみましょう:
class MyGenClass {
Number age;
public <T extends Number> void setAge(T ageParam){
age = ageParam;
}
}
したがって、以下では、(明示的な型引数は、思考を推測することができる)ことが可能です。
MyGenClass gnClass = new MyGenClass();
gnClass.<Integer>setAge(80);
gnClass.<Long>setAge(80L);
gnClass.<Double>setAge(80.0);
gnClass.<Float>setAge(80.0F);