Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java中扩展的泛型方法_Java_Generics_Netbeans - Fatal编程技术网

java中扩展的泛型方法

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类。但是当我运行 method1通过这些参数,它可以很好地执行。 我错过什么了吗?method1是否应该引发异常,因为对象不扩展整数

 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教程泛型没有显示这个方法。我们怎么知道这个?还有别的办法吗?