如何将列表<object>转换为在java中列出<my type>?</type> </object>

时间:2014-02-06 09:29:13

标签: java object types casting

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中将列表转换为列表?

4 个答案:

答案 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();