我正在尝试使用Guava文档示例TypeToken
中所示的方式在运行时查找类型参数:IKnowMyType
public class Test<E extends Enum<E>> {
private static enum MyEnum {
FIRST,
SECOND
};
private final TypeToken<E> enumType = new TypeToken<E>(getClass()) {
};
public static void main(String[] args) {
Test<MyEnum> container = new Test<>();
System.out.println(container.enumType.getRawType());
}
}
运行此代码时,将得到class java.lang.Enum
输出。为什么不class MyEnum
反而变得呢?
此“ hack”不适用于运行时类型的值Test
。
Java无法在Test
此处实例化类时传播推断的类型参数
Test<MyEnum> container = new Test<>();
到宣言
private final TypeToken<E> enumType = new TypeToken<E>(getClass()) {
};
因此,TypeToken
不知道E
应该指的是什么。
该的Javadoc状态
构造一个新的类型标记,
T
同时 在的上下文中declaringClass
解析自由类型变量 。客户端创建一个空的匿名子类。 这样做会将类型参数嵌入匿名类的类型层次结构中,因此尽管删除,我们仍可以在运行时重新构造它。
这就是您需要做的。
Test<MyEnum> container = new Test<MyEnum>() {
};
现在,由于类维护有关其泛型超类的信息,因此以上实例化中的getClass
调用TypeToken
为E
解释提供了足够的上下文MyEnum
。
我有一个类
问题内容: 我刚刚了解了这种美观的语法 用可能是类型的元素来清空。Java的源代码如下所示: 现在,如果我以这种方式编写了一个泛型类型不出现在参数列表中的方法,那么有什么方法可以访问成为的实际类呢? 我的意思是,到目前为止,我编码同一件事的方法是 如果删除了-parameter,我将无法执行。显然我可以 但这给了我通常的警告。好的,在这里有帮助,但是实际上我想对方法的预期返回类型做些事情。如果我添
我对如何使用CursorRecyclerViewAdapter使用multipleView类型有疑问,我可以使用两种布局,但只获得第一个项目的头,而不是所有项目的头。如何做到这一点,到目前为止,我尝试过的是: 如果我删除OnBindViewWholder中的条件,下面是我的Logcat消息:
问题内容: 该问题的可接受答案描述了如何在类中创建的实例。这涉及将参数传递给构造函数并从中调用方法。 然后创建的新实例,并传递参数。 如果新类的泛型类型参数不是某个已知类,但它本身是泛型类型参数,该怎么办?假设我还有其他班级,我想从该班级内部创建一个新实例。然后,如果尝试传递,则会收到以下编译器错误: 有没有办法解决? 对我来说触发错误的代码是: 发生错误,是因为我不会写。还有其他传递相同信息的方
这个问题的公认答案描述了如何在类中创建的实例。这涉及将参数传递给构造函数,并从中调用方法。 然后创建的新实例,并传入参数。 对我来说,触发错误的特定代码位是: 错误发生,因为我不能编写。还有其他方式传递同样的信息吗?
问题内容: 说我有一个像这样的父接口/类 还有许多实现通用类型的实现接口。 我可以使用反射来获取的情况下代表我有没有为对象。像这样: 目前,我已经作为参数传递了,但是如果可以的话,我想简化一些事情。 问题答案: 是的,尽管什么其他人说,这个信息 是 可用的,如果你有机会到子类对象。您需要与一起使用。 在您的示例中,“实际”类型参数应返回for 。