我有一个带有泛型方法的TestClass类。但是当我跑的时候 method1与那些参数执行正常。 我错过了什么吗? method1是否应抛出异常,因为object不会扩展Integer?
TestClass i = new TestClass();
i.method1(new Object(), new Integer(2));
public class TestClass {
protected final int testClassvar1=2;
public <E,T extends E> void method1(T t,E e) {
System.out.println(e.getClass());
}
}
答案 0 :(得分:2)
调用泛型方法时没有设置特定类型,因此编译器将其理解为i.<Object, Object> method1(new Object(), new Integer(2));
。
答案 1 :(得分:0)
要强制执行约束,T在编译时扩展E,当您调用该方法时,需要指定将替换参数化类型的类型。否则,两种类型都被假定为Object。
i.<Object,Integer>method1(new Object(), new Integer(2));
答案 2 :(得分:0)
method1
将始终能够获取任何引用类型的两个参数,因为T
和E
可以选择为Object
,并且任何引用类型都是Object
的子类型。因此,method1
也可以声明为public void method1(Object t, Object e)
;它没有任何区别。声明它的方式,method1
除了可以用Object
完成的事情外,没有任何事情可以对它的任何参数做任何事情,因为类型变量没有界限(所以Java不会让程序员用Object
)做任何事情。 (这里,该方法唯一做的就是在.toString()
上调用e
,这是由Object
提供的。)所以除了他们两个都没有任何限制之外没有理由Object
。