我正在处理一个旧项目。有一个带有参数化类型的通用对象DataWrapper(在此图中简化)。通常,我可以这样使用它:DataWrapper<Integer> d = new DataWrapper<Integer>();
或DataWrapper<MyObjectX> d = new DataWrapper<MyObjectX>();
class DataWrapper <T> {
protected List<T> data;
public List<T> getData() {
return data;
}
public void setData(List<T> data) {
this.data = data;
}
}
但是,在我使用org.jboss.resteasy.client.ClientResponse
的情况下,该对象需要通过Web服务传输。
ClientResponse clientResponse = (ClientResponse) myRestObject.myRestMethod();
// Then convert it back to DataWrapper<MyObjectX>
// This is where the issue happened, I think!
DataWrapper<MyObjectX> result = clientResponse.getEntity(DataWrapper.class);
在上面的声明中,我无法通过MyObjectX ,如下所示:DataWrapper<MyObjectX> result = clientResponse.getEntity(DataWrapper<MyObjectX>.class);
我可以打电话给List<MyObjectX> myList = result.getData();
但是当它迭代时将成为错误
for (MyObjectX o: myList) {
// ERROR!
// java.lang.ClassCastException: class java.util.LinkedHashMap
// cannot be cast to class com.mypackage.MyObjectX
logger.info(o.getName());
}
package org.jboss.resteasy.client;
public abstract class ClientResponse<T> extends Response{
public abstract <T2> T2 getEntity(Class<T2> type);
}
所以我的问题是:我们如何传递泛型类作为类型?还是不可能?