gpt4 book ai didi

java - 如何理解泛型方法中选择了什么类型而不是T?

转载 作者:行者123 更新时间:2023-12-02 05:44:31 24 4
gpt4 key购买 nike

请研究以下代码片段:

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;
}
}

在名称为 method 的方法的 return 语句中可以写什么,除了 null;

对象?数字?整数?

最佳答案

也许可以帮助你理解它。由于您无法从第二个列表中返回任何项目,因此只有一个选项可以从第一个列表中返回项目。

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>)

关于java - 如何理解泛型方法中选择了什么类型而不是T?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24222861/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com