java中扩展的泛型方法
我有一个带有泛型方法的TestClass类。但是当我运行 method1通过这些参数,它可以很好地执行。 我错过什么了吗?method1是否应该引发异常,因为对象不扩展整数java中扩展的泛型方法,java,generics,netbeans,Java,Generics,Netbeans,我有一个带有泛型方法的TestClass类。但是当我运行 method1通过这些参数,它可以很好地执行。 我错过什么了吗?method1是否应该引发异常,因为对象不扩展整数 TestClass i = new TestClass(); i.method1(new Object(), new Integer(2)); public class TestClass { protected final int testClassvar1=2; publi
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());
}
}
TestClass i=newtestclass();
i、 方法1(新对象(),新整数(2));
公共类TestClass{
受保护的最终int testClassvar1=2;
公共无效方法1(T、T、E){
System.out.println(e.getClass());
}
}
调用泛型方法时未设置特定类型,因此编译器将其理解为i。方法1(新对象(),新整数(2))代码> 要在编译时强制约束T扩展E,当调用该方法时,需要指定将替换参数化类型的类型。否则,这两种类型都假定为对象
i.<Object,Integer>method1(new Object(), new Integer(2));
i.method1(新对象(),新整数(2));
方法1
将始终能够接受任何引用类型的两个参数,因为可以选择T
和E
作为对象
,并且任何引用类型都是对象
的子类型。所以method1
也可以声明为publicvidmethod1(objectt,objecte)
;这没什么区别。按照它的声明方式,method1
除了可以使用Object
执行的操作之外,它的任何一个参数都无法执行任何操作,因为类型变量是没有边界的(因此Java不会让程序员对它执行任何超出Object
的操作)。(在这里,该方法所做的唯一事情就是调用对象
提供的上的.toString()
)因此,除了它们都是对象
之外,没有任何限制的理由,但同时,似乎唯一的方法是定义测试类
,然后在方法的类型签名中仅放置
,虽然我仍然完全不知道为什么你的代码不会导致编译器死亡…你没有给出泛型的信息。使用i.method1()
否则它将假定@sungjinsteeyoo哦,我现在就明白了。是啊,我今天也学到了一些新东西DOracle教程泛型没有显示这个方法。我们怎么知道这个?还有别的办法吗?