Java 如何理解泛型方法中选择了什么类型而不是T?
请研究以下代码段:Java 如何理解泛型方法中选择了什么类型而不是T?,java,generics,type-conversion,wildcard,type-inference,Java,Generics,Type Conversion,Wildcard,Type Inference,请研究以下代码段: class Ideone { public static void main (String[] args) throws java.lang.Exception { List<Integer> listIntegers = null; List<Object> listObjects = null; MyClass mcls =new MyClass (); SomeRefer
class Ideone {
public static void main (String[] args) throws java.lang.Exception {
List<Integer> listIntegers = null;
List<Object> listObjects = null;
MyClass mcls =new MyClass ();
SomeReference ref = mcls.method(listIntegers,listObjects));//which SomeReference may be?
}
}
class MyClass {
<T> T method(List<? extends T> arg1, List<? super T> arg2) {
return null;
}
}
类表意符{
公共静态void main(字符串[]args)引发java.lang.Exception{
List listIntegers=null;
List listObjects=null;
MyClass mcls=新的MyClass();
SomeReference ref=mcls.method(listIntegers,listObjects));//哪个SomeReference可能是?
}
}
类MyClass{
T方法(List它可能会帮助您理解它。因为您无法从第二个列表返回任何项目,所以只有一个选项可以从第一个列表返回项目
class MyClass {
<T> T method(List<? extends T> list1, List<? super T> list2) {
return list1.get(0); // Valid
//return list2.get(0); // Invalid Type mismatch: cannot convert from capture#1-of ? super T to T
}
}
List<Integer> listIntegers = new ArrayList<Integer>();
listIntegers.add(1);
List<String> listObjects = new ArrayList<String>();
listObjects.add("2");
MyClass mcls = new MyClass();
// Valid
Integer result=mcls.method(listIntegers, listObjects);
// Invalid
String result=mcls.method(listIntegers, listObjects);
// The method method(List<? extends T>, List<? super T>) in the type MyClass is not applicable for the arguments (List<Integer>, List<String>)
class-MyClass{
T法(列出您想要返回的内容?您的预期输出是什么?@Braj我不知道我可以返回什么。我想知道所有可能的差异如果不知道您想要做什么,请先考虑一下,然后再问一次。即使您不知道此方法在这里做什么,那么您为什么希望我们考虑它。永远不要问任何这样愚蠢的问题我想这样写:Reference ref=mcls.method(listIntegers,listObjects)看,你传递了两个列表,只返回了一个项目。但我不清楚你是如何在方法中使用这些列表的,以及你想返回什么。请说得更清楚一点……最具体的类型是什么?如果你认为你将在这个方法中传递两个不同类型的列表,那么使用双通用参数
,它只是T理论问题