使用Guava检查泛型类



我知道我在这里展示的是不好的,但我仍然需要这样做…我想检查类的泛型在给定的方法。我尝试使用Guava和描述从这里:https://code.google.com/p/guava-libraries/wiki/ReflectionExplained#Introduction这是我有的东西,我不完全明白为什么它不起作用:' ' '

abstract static public class IKnowMyType<T> {
    public TypeToken<T> type = new TypeToken<T>(getClass()) {};
}
protected <P> void abc(P el){
    System.out.println(new IKnowMyType<P>(){}.type);
}
protected <P> void abc(){
    System.out.println(new IKnowMyType<P>(){}.type);
}
void test(){
    System.out.println(new IKnowMyType<String>(){}.type); // -> java.lang.String
    this.abc("AA"); // -> P
    this.<String>abc(); // -> P
}

我想要得到的是P(在这种情况下是字符串)而不是P的适当类。如何做到这一点?为什么这些abc方法不工作,因为我的期望?

没有办法做你想做的事情,这是完全按照预期的工作。

类型擦除在运行时销毁对象的泛型类型信息,以及方法的类型参数的知识(就像您在这里发现的那样)。类型擦除不影响的是类知道它们的编译时泛型,因此,例如,如果你有

class Foo<T> {}
class Bar extends Foo<String>

Bar.class知道它是Foo<String>的子类,而不仅仅是Foo。这就是TypeToken的工作原理,但它只在编译时类型固定时起作用;不能留作类型变量

相关内容

  • 没有找到相关文章

最新更新