我正在编写测试用例,难以理解如何将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对象。
答案 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