[英]Reverse items in generic List
我需要在从List继承的泛型类上将这些项目交换回最前面。 要交换的项目可以是任何类型的课程。 我通过将内容压入相同类型的堆栈中并随后弹出它们来完成此操作。
我收到以下错误:堆栈中的推(捕获)无法应用于(捕获)
代码:
static <T extends List<?>> void swapList(T list){
Stack<?> temp = new Stack<>();
//temp = list.forEach(Collectors.toCollection(Stack::new));
for(int i = 0 ; i < list.size() ; i++){
temp.push(list.get(i)); //list.get(i) produces the error
}
temp.forEach(System.out::println);
}
T扩展List没关系。 重要的是该列表内的对象类型。
因此,最有可能的是,您的方法签名应该看起来像:
static <T> void swapList(List<T> list){
含义:List的子类传入此方法应该(也没有关系)。通用部分应该是关于列表内部的东西。
您不能向具有extends
的集合中添加某些内容( ?
是? extends Object
的简写)。 为了确保类型安全,编译器不允许您在此类集合(接受类型变量类型的参数的集合)上调用使用者方法 。 这是因为它可能是Stack<Integer>
, Stack<Foo>
,而不仅仅是Stack<T>
。
在这里最简单的操作是将Stack
的类型更改为
Stack<Object> temp = new Stack<>();
您实际上并不关心要添加的内容。 并且您不关心返回反向的List<T>
。
实际上,您的类型变量是多余的。 您可以简单地将方法声明为:
static void swapList(List<?> list) {
但是,如果确实要使用类型变量,则将其声明为代表列表元素类型的变量,因此也可以将其用作堆栈上的绑定:
static <T> void swapList(List<T> list){
Stack<T> temp = new Stack<>();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.