[英]How to cast list<object> to list<MyType> in java?
PFB the code where i am trying to type cast list<object>
to list<MyType>
in java, PFB我试图在Java中将
list<MyType>
list<object>
键入list<MyType>
的代码,
List<CoOffer> couponOffList = (List<CoOffer>)cioffers.getContent();
This getContent()
returns list<object>
. 此
getContent()
返回list<object>
。
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"content"
})
@XmlRootElement(name = "CiOffers")
public class CiOffers{
@XmlElementRef(name = "CouponOffer", namespace = "http://www.ebi.com/webservices/", type = CouponOffer.class)
@XmlMixed
protected List<Object> content;
Now I have my java class CoOffer
. 现在我有我的Java类
CoOffer
。
import java.io.Serializable;
public class CoOffer implements Serializable{
/**
*
*/
private static final long serialVersionUID = -3155316759617764263L;
private String cooffName;
public String getCooffName() {
return cooffName;
}
public void setCooffName(String cooffName) {
cooffName= cooffName;
}
}
How to cast list to list in java? 如何在Java中将列表强制转换为列表?
该属性@XmlMixed
注释,这意味着它表示混合的内容,因此,不能保证您要转换的类型是安全的-列表可能包含CouponOffer
对象(表示元素)和java.lang.String
对象的混合。 (表示元素之间的混合内容文本节点)。
You cannot cast it directly in a type-safe manner. 您不能以类型安全的方式直接强制转换。 Yes you can perform an unchecked cast, but that is not a good idea.
是的,您可以执行未经检查的强制转换,但这不是一个好主意。
Now a List<Object>
can contain any type of object, and List<MyType>
can only contain objects of type MyType
. 现在,一个
List<Object>
可以包含任何类型的对象,和List<MyType>
只能包含类型的对象MyType
。 So its not possible . 因此不可能 。
Solution is to make JAXB generate List<MyType>
than List<Object>
解决方案是使JAXB生成
List<MyType>
不是List<Object>
You can create a helper method to cast return a new list. 您可以创建一个辅助方法来强制返回新列表。
public <T> List<T> castTo(List<Object> ol, Class<T> t) {
List<T> ret = new ArrayList<>();
for (Object o : ol) {
try {
ret.add(t.cast(o));
} catch (ClassCastException e) {
System.err.println(e.getMessage()+" "+o);
}
}
return ret;
}
And use it like that: 并像这样使用它:
@Test
public void testCastTo() {
Class<MyType> t = MyType.class;
List<Object> ol = new ArrayList<>();
ol.add(new MyType(1));
ol.add("12");
ol.add(new MyType(123));
List<MyType> l = c.castTo(ol, t);
assertEquals(2,l.size());
}
If you are sure that returned object is List<CoOffer>
you can cast it. 如果您确定返回的对象是
List<CoOffer>
,则可以List<CoOffer>
它。 As; 如;
(List<CoOffer>)(Object)cioffers.getContent();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.