我开始探索泛型这个话题,几乎立刻就发现了一个问题——事实上,我想创建一个方法来接受任何 List 作为输入,其元素将是 Object 类型或派生自它,然后返回相同的列表,但包含两个元素的位置。
import java.util.List;
public class Main
{
public static void main(String[] args)
{
List<Integer> intList = new ArrayList<>();
intList.add(1);
intList.add(2);
List<String> StringList = new ArrayList<>();
StringList.add("first");
StringList.add("second");
List<Character> charList = new ArrayList<>();
charList.add('a');
charList.add('b');
test(intList);
test(StringList);
test(charList);
}
public static void test(List<? extends Object> list)
{
var temp = list.get(1);
list.set(1, list.get(0));
list.set(0, temp);
}
}
编译器对代码行发誓
list.set(1, list.get(0));
list.set(0, temp);
它输出以下错误:
Required type:
capture of ? extends Object
Provided:
capture of ? extends Object
我有一个理论认为,错误发生的原因是,例如,如果我将一个整数列表放入方法中,然后使用 list.set 我在那里分配一个 Object,这可能会导致输出结果不正确。这是错误吗?如果是这样,如何转换代码以便我可以提交任何工作表并交换其中的两个元素。
这很简单: