相关疑难解决方法(0)

返回具有泛型类型的Class实例

这是一个简单的示例,演示了我遇到的与类型擦除相关的问题.我有一个这样的课:

public abstract class AbstractHandler<T> {

    ...
    public abstract Class<T> handledType();
}
Run Code Online (Sandbox Code Playgroud)

然后我有这个实现:

public class ConcreteHandler extends AbstractHandler<Map<String, List<Thing>>> {

    @Override
    public Class<Map<String, List<Thing>>> handledType() {
        //what do I return here?!
    }
}
Run Code Online (Sandbox Code Playgroud)

我不能回来Map<String, List<Thing>>.class,因为那在语法上甚至都没有.我尝试在子类型中创建泛型类型参数HashMap<String, List<Thing>>然后返回new HashMap<String, List<Thing>>().getClass(),但这不起作用,因为返回类型Class<T>#getClass()Class<? extends T>.我TypeToken从Guava 看了一下,这个getRawType方法似乎很有希望,但它又回来了Class<? super T>.

我现在有一个解决方法,看起来像这样:

public class ThingListMap {
    private Map<String, List<Thing>> thingListMap;

    ...
}
Run Code Online (Sandbox Code Playgroud)

我只是ThingListMap用作泛型类型参数.

另一种可能的解决方法是执行强制转换:

public Class<Map<String, List<Thing>>> handledType() {
    return …
Run Code Online (Sandbox Code Playgroud)

java generics generic-type-argument type-erasure

12
推荐指数
1
解决办法
588
查看次数

Java Generics:获取一个Class <Collection <T >>?

我在使用泛型时遇到了麻烦.给出以下示例:

class A<T> {
  public A(Class<T> myType){
  }
}

class B<E> extends A<Collection<E>> {
  public B(Class<E> myEType){
    super(???);
  }
}
Run Code Online (Sandbox Code Playgroud)

什么 ???应该 ? Collection.class不工作...... Collection<E>.class都没有. (Class<Collection<E>>)Collection.class不工作...

如果有一个java泛型大师,我需要帮助......:/

java generics

7
推荐指数
1
解决办法
4074
查看次数