我使用.class-operator向通用类提供有关所包含类型的信息。对于非泛型包含类型,例如Integer.class,这可以正常工作。但是所包含的类型是泛型的,例如,List.class否则List.class会导致有关类强制转换的编译时错误。
有一种方法可以避免这些错误,但是我对这里发生的事情感到好奇。有人可以解释发生了什么吗?为什么情况原样?解决问题的最佳方法是什么?
以下几行说明了该问题:注意,外部通用类型期望Class作为参数,因此在这种情况下Class>。
Class tInt = Integer.class; // Works as expected.
Class tList = List.class; // Works with warning, but is not
// what i'm looking for.
Class> tListInt1 = List.class; // Error
Class> tListInt2 = (Class>) List.class; // Error
Class> tListGeneric = (Class>) List.class; // Error
下一行有效:
Class> tListInt3 =
(Class>) ((Class)List.class);
为什么声明tListInt2并tListGeneric给予和错误?为什么先进行向上转换再进行向下转换tListInt3不会产生错误?有没有更好的方法来声明tListInt3?
此致,
卡斯珀·范·登·伯格
ps。让我知道您是否想看一下需要这种类型信息的外部通用容器的代码。如有需要,我会发布。