PFB我在java中尝试将list<object>
转换为list<MyType>
的代码,
List<CoOffer> couponOffList = (List<CoOffer>)cioffers.getContent();
此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;
现在我有了我的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;
}
}
如何在java中将列表转换为列表?
答案 0 :(得分:1)
该属性带有注释@XmlMixed
,这意味着它代表混合内容,因此您所询问的强制转换不保证是安全的 - 该列表可能包含CouponOffer
个对象的混合(代表元素)和java.lang.String
对象(表示元素之间的混合内容文本节点)。
答案 1 :(得分:0)
您 无法 直接以类型安全方式投放它。是的,您可以执行未经检查的演员表,但这不是一个好主意。
现在List<Object>
可以包含任何类型的对象,而List<MyType>
只能包含MyType
类型的对象。所以不可能。
解决方案是让JAXB生成List<MyType>
而不是List<Object>
答案 2 :(得分:0)
您可以创建一个帮助方法来转换返回一个新列表。
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;
}
并使用它:
@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());
}
答案 3 :(得分:0)
如果您确定返回的对象是List<CoOffer>
,则可以投射它。
作为;
(List<CoOffer>)(Object)cioffers.getContent();