现在刚接触了解泛型,对泛型感到十分模糊:
1.对于指定了泛型的类,类中的函数可否出现读取或返回其它类的函数,因为所有书都太注重泛型的T而没能与其他类比较;
2.我确定了一个泛型类,把其他类的对象传给该类无报错,返回时候才报错,这又是为何,求解public class Holder3 <T>{
private T a;
public Holder3(T a){
this.a = a;
System.out.println(a);
}
public void set(T a){
this.a = a;
}
public T get(){
return a;
}
public static void main(String[] args){
Holder3<Tetris> h3 = new Holder3(new hello());//该行无报错
// Tetris a = h3.get();//抛出异常
}
}

解决方案 »

  1.   

    请问 new hello()  是 Tetris 相同类型么?
    Holder3<Tetris> h3 = new Holder3(new hello());//该行无报错
    //        Tetris a = h3.get();//抛出异常
    试试这样?Holder3<Tetris> h3 = new Holder3<Tetris>(new Tetris());//该行无报错
    //        Tetris a = h3.get();//抛出异常
      

  2.   

    hello是一个其他的类,与原本完全无关,我只是好奇为什么插入其他类型无报错也无异常,难道构造函数与其他普通函数有区别
      

  3.   

    hello是一个其他的类,与原本完全无关,我只是好奇为什么插入其他类型无报错也无异常,难道构造函数与其他普通函数有区别之所以可以放入而没有报错,是因为
    你的写法是:Holder3<Tetris> h3 = new Holder3(new hello());//该行无报错
    但编译器应该会警告你没有经过类型检查。
    如果你写成
    Holder3<Tetris> h3 = new Holder3<Tetris>(new hello());
    指定了类型,就报错了然后get的时候 类型不匹配。自然报错。Java7 可以写成
    Holder3<Tetris> h3 = new Holder3<>(new Tetris());