将LinkedList <object>转换为LinkedList <customer> </customer> </object>

时间:2013-09-06 16:46:27

标签: java generics casting

我有这样的方法

public static LinkedList<Object> getListObjectWithConditionInXMLFile(String className){
       LinkedList<Object> lstObj = new LinkedList<Object>();
       if(className.equals("Customer")){
            //read Data from XML File
            Customer customer = ...;
            lstObj.add(customer);
       }
       ....
       return lstObj;
}

之后我调用此方法并想要转换:

LinkedList<Customer> lstCustomer = (LinkedList<Customer>()) getListObjectWithConditionInXMLFile("Customer");

但它无法施放。 如何从LinkedList转换为LinkedList? 请帮助我 !非常感谢!

2 个答案:

答案 0 :(得分:1)

您可以将方法重构为以下内容:

public static <E> LinkedList<E> getListObjectWithConditionInXMLFile(Class<E> type){
       LinkedList<E> lstObj = new LinkedList<E>();
       if (type.equals(Customer.class)) {
           Customer customer = ...
           lstObj.add((E)customer);
       }
       return lstObj;
}

通过使方法通用并传递Class参数,您可以返回正确类型的列表。

你可以这样称呼

List<Customer> l = getListObjectWithConditionInXMLFile(Customer.class);

答案 1 :(得分:0)

您必须创建新的List并将已铸造的对象添加到Customer的新链接列表中。

LinkedList<Customer> custList = new LinkedList<>();
for(Object obj: getListObjectWithConditionInXMLFile("Customer")) {
   custList.add((Customer)obj));
}

或者,如果可能的话,最好在评论中使用“Boris the Spider”中提到的泛型。

 public static <T> LinkedList<T> getListObjectWithConditionInXMLFile(Class<T> requiredClass)

“micha”给出的定义如下。

public static <T> LinkedList<T> getListObjectWithConditionInXMLFile(Class<T> requiredClass){
       LinkedList<T> listObj = new LinkedList<>();
       if (requiredClass.equals(Customer.class)) {
           Customer customer = /*...*/
           listObj.add((T)customer);
       }
       return listObj;
}

然后,你可以打电话给

LinkedList<Customer> custList = getListObjectWithConditionInXMLFile(Customer.class);