类型Class<T>
有一个通用参数,即对象所代表的类的类型,这非常有意义。
但是,在处理具有泛型参数的类型的类对象时,例如List<T>
,我们可以通过两种可能的方式解决这个问题:
Class<List<MyType>>
,这是没有意义的:List
的泛型参数失去了意义,因为我们只是引用它的(静态)类。即使Class<List<?>>
在概念上看起来也是错误的。Class<List>
。但在这种情况下,编译器将生成警告,因为它将List
检测为非参数化。首先我想,编译器不够智能,无法正确处理这种情况,但我猜原始的原因具有概念性。
这个问题有一个干净的解决方案吗?如果没有,您认为最好的处理方式是什么?插入@SuppressWarnings("rawtypes")
或使用Class<List<?>>
?
更新
我在某些代码上遇到此问题,用户应该能够为数据库连接提供自定义类。此类应扩展DoodleDatabaseMap<T>
,这是一个抽象类并实现Map<String, T>
。
我认为上面的描述不够准确。当我需要保存传递类对象或将它们分配给变量时,它会变得毛茸茸。我的API方法如下所示:
public static void setDatabaseMap(Class<? extends DoodleDatabaseMap> databaseMap) {
// ...
}
在此处为DoodleDatabaseMap
提供泛型类型会在调用它时导致编译错误(FileDatabaseMap
extends DoodleDatabaseMap
):
DoodleDebug.setDatabaseMap(FileDatabaseMap.class);
这会导致出现错误消息:The method setDatabaseMap(Class<? extends DoodleDatabaseMap<?>>) in the type DoodleDebug is not applicable for the arguments (Class<FileDatabaseMap>)
答案 0 :(得分:2)
这个类应该扩展DoodleDatabaseMap,它是一个抽象类并实现Map
然后你可以改变这个
static void setDatabaseMap(@SuppressWarnings("rawtypes")
Class<DoodleDatabaseMap> databaseMap)
使用{/ 3}类型
static void setDatabaseMap(Class<DoodleDatabaseMap<?>> databaseMap)