好吧,我有一个Customer类(没有基类)。
我需要从LinkedList投射到List。有什么干净的方法可以做到这一点吗?
请注意,我需要将其转换为List。没有其他类型可以做。(我正在使用Slim和FitNesse开发测试夹具)。
编辑:好的,我想我需要在这里给出代码示例。
import java.util.*;
public class CustomerCollection
{
protected LinkedList<Customer> theList;
public CustomerCollection()
{
theList = new LinkedList<Customer>();
}
public void addCustomer(Customer c){ theList.add(c); }
public List<Object> getList()
{
return (List<? extends Object>) theList;
}
}
因此,按照Yuval A的说法,我终于以这种方式编写了代码。但是我得到这个错误:
CustomerCollection.java:31: incompatible types
found : java.util.List<capture#824 of ? extends java.lang.Object>
required: java.util.List<java.lang.Object>
return (List<? extends Object>)theList;
^
1 error
那么,进行此转换的正确方法是什么?
您不需要强制转换。LinkedList
实现,List
因此您无需在此处进行任何转换。
即使您希望向下转换到的List
of,Object
也可以使用以下代码中的泛型来实现:
LinkedList<E> ll = someList;
List<? extends Object> l = ll; // perfectly fine, no casting needed
现在,在完成编辑后,我了解了您要执行的操作,并且没有创建新的List
像这样的操作是不可能的:
LinkedList<E> ll = someList;
List<Object> l = new LinkedList<Object>();
for (E e : ll) {
l.add((Object) e); // need to cast each object specifically
}
并且我将解释为什么否则无法做到这一点。考虑一下:
LinkedList<String> ll = new LinkedList<String>();
List<Object> l = ll; // ERROR, but suppose this was possible
l.add((Object) new Integer(5)); // now what? How is an int a String???
有关更多信息,请参见Sun Java泛型教程。希望这可以澄清。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句