gpt4 book ai didi

java - 使用 Guava 检查泛型类

转载 作者:行者123 更新时间:2023-11-29 03:33:15 27 4
gpt4 key购买 nike

我知道我在这里展示的内容很糟糕,但仍然 - 我需要这样做......我想检查给定方法中的泛型类。我尝试使用 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 的正确类(在本例中为 String),而不是 P。这个怎么做?为什么那些 abc 方法没有像我预期的那样工作?

最佳答案

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

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

class Foo<T> {}

class Bar extends Foo<String>

然后 Bar.class知道它是Foo<String>的子类,不只是 Foo .就是这样TypeToken有效,但仅当类型在编译时固定时才有效;它不能保留为类型变量。

关于java - 使用 Guava 检查泛型类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16901375/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com