なぜ私は、ジェネリック医薬品の整数の変数に整数型のパラメータを設定することで、エラーを取得していますか?

スタックオーバーフロー :

私は、以下のプログラムがあります。

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);

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=331840&siteId=1