在java中使用扩展的通用方法

时间:2017-11-03 02:23:59

标签: java generics netbeans

我有一个带有泛型方法的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()); 
       }
   }

3 个答案:

答案 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将始终能够获取任何引用类型的两个参数,因为TE可以选择为Object,并且任何引用类型都是Object的子类型。因此,method1也可以声明为public void method1(Object t, Object e);它没有任何区别。声明它的方式,method1除了可以用Object完成的事情外,没有任何事情可以对它的任何参数做任何事情,因为类型变量没有界限(所以Java不会让程序员用Object)做任何事情。 (这里,该方法唯一做的就是在.toString()上调用e,这是由Object提供的。)所以除了他们两个都没有任何限制之外没有理由Object