如何将对象同时投射到List和MyBean

时间:2019-03-15 13:07:42

标签: java

我正在编写测试用例,难以理解如何将Object都转换为List.class和MyBean.class。我认为这是可能的唯一方法是通过MyBean.class可序列化的事实。

if (message.getBody(List.class).isEmpty())
            throw new GenericException("array is empty");

MyBean myBean1 = message.getBody(MyBean.class);

if (myBean1.getParam1() != null && !myBean1.getParam1().isEmpty()) {
    //unreachable code here
}

如果有人可以阐明这个问题,我将非常感激。

这里有一些我一直在尝试理解的代码示例。

    String myBeanJsonFormat= "{" +
            "  \"search\": [" +
            "    {" +
            "      \"operation\": \"equal\"," +
            "      \"path\": \"/core/creator\"," +
            "      \"value\": \"aValue\"," +
            "      \"match\": \"/core/modifiedBy\" " +
            "    }" +
            "  ]" +
            "}";
    ObjectMapper objectMapper = new ObjectMapper();
    MyBean myBeanTest= objectMapper.readValue(myBeanJsonFormat, MyBean.class);
    assert myBeanTest.getParam1() != null; //pass

    List myBeanListTest = (List) myBeanTest; //classCastException below
    //java.lang.ClassCastException: myPackage.MyBean cannot be cast to java.util.List

    byte[] test = SerializationUtils.serialize(myBeanJsonFormat);
    MyBean myBeanTest1 = SerializationUtils.deserialize(test);
    assert myBeanTest1.getSearchOperations()!=null; //ERROR: Exception below
    //java.lang.ClassCastException: java.lang.String cannot be cast to mypackage.MyBean

为了清楚起见,我的目标是找出要正确设置此消息的消息正文的功能。

我可以通过列表以通过列表检查,但是我无法通过MyBean类型转换。

我可以传递json数组格式的字符串,这将传递列表强制转换,但不能传递MyBean强制转换。

如果我注释掉List的if语句,则可以毫无问题地通过MyBean对象。

2 个答案:

答案 0 :(得分:0)

您应该更改List myBeanListTest = (List) myBeanTest;而不是此List ob = Arrays.asList(myBeanTest);,这样才能解决classCastException问题。

答案 1 :(得分:0)

我至少看到2种情况,可以在其他2个类别中投射对象。

由于界面

让我们成为一个实现列表List的类

public class myClass extends MyBean implements List {

然后可以将MyClass的实例强制转换为MyBean或List

由于级联子类

如果MyBean类扩展了MySuperBean类

public class MyBean extends MySuperBean {

然后是MyBean的子类

public class MyClass extends MySuperBean {

然后可以将MyClass的实例强制转换为MyBean或MySuperBean