map = new HashMap<Class<? extends AbstractDAO<K,V>>, AbstractDAO<K,V>>);
不被允许
有没有办法实现这样的目标?
当然可以,只要你声明K
和V
作为类型。
在这里,我将它们声明为方法类型:
public static class AbstractDAO<K, V> {
}
public static <K, V> void typedMethod() {
Map<Class<? extends AbstractDAO<K, V>>, AbstractDAO<K, V>> map
= new HashMap<Class<? extends AbstractDAO<K, V>>, AbstractDAO<K, V>>();
}
或者,如果您不想声明类型,请在任何地方使用通配符将所有内容“未知”:
public static void method() {
Map<Class<? extends AbstractDAO<?, ?>>, AbstractDAO<?, ?>> map = new HashMap<Class<? extends AbstractDAO<?, ?>>, AbstractDAO<?, ?>>();
}
以上代码全部编译。
如下所示:
class Test<K, V> {
Map<K, V> map = new HashMap<Class<? extends AbstractDAO<K,V>>, AbstractDAO<K,V>>();
}