Java泛型类作为参数

时间:2019-05-02 15:44:49

标签: java generics

我正在处理一个旧项目。有一个带有参数化类型的通用对象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);
}

所以我的问题是:我们如何传递泛型类作为类型?还是不可能?

0 个答案:

没有答案