0
map = new HashMap<Class<? extends AbstractDAO<K,V>>, AbstractDAO<K,V>>);

不被允许

有没有办法实现这样的目标?

4

2 回答 2

1

当然可以,只要你声明KV作为类型。

在这里,我将它们声明为方法类型:

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<?, ?>>();
}

以上代码全部编译。

于 2013-07-10T05:11:22.323 回答
1

如下所示:

 class Test<K, V> {
    Map<K, V> map = new HashMap<Class<? extends AbstractDAO<K,V>>, AbstractDAO<K,V>>();
 }
于 2013-07-10T04:38:42.693 回答