我试图通过Java的泛型类型推断
Map<String, Map<String, List<TranslationImport>>> variable
超类的构造函数,它预计:
Map<String, Map<String, List>>
我试图改变父类的构造函数期待
Map<String, Map<String, List<?>>>
和
Map<String, Map<String, ? extends List>>
无济于事。
我试图通过Java的泛型类型推断
Map<String, Map<String, List<TranslationImport>>> variable
超类的构造函数,它预计:
Map<String, Map<String, List>>
我试图改变父类的构造函数期待
Map<String, Map<String, List<?>>>
和
Map<String, Map<String, ? extends List>>
无济于事。
如果我理解正确,可以更改超类的构造函数签名;你只需要一个接受List
元素类型的任意值的东西?
那应该是Map<String, ? extends Map<String, ? extends List<?>>>
。
也许这将 “帮助” 痘痘
static void test(Map<String, Map<String, List>> m) {
System.out.println(m);
}
public static void main(String[] args) {
Map<String, Map<String, List<TranslationImport>>> variable = new HashMap<String, Map<String, List<TranslationImport>>>();
Map<String, Map<String, List>> m2=(Map)variable;
test(m2);
}
问题是,捕捉转换没有递归应用: '?'
http://docs.oracle.com/javase/specs/jls/se7/html/jls-5.html#jls-5.1.10
所以嵌套在<>是捕捉转换
一种方式忽视使你的代码工作(虽然没有完全从视图获得来自仿制药的任何值的点满意)会做这样的事情:
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.util.HashMap;
public class Foo extends FooParent {
Foo(Map<String, Map<String, List<TranslationImport>>> variable) {
super(variable);
System.out.println("ok");
}
public static void main(String[] args) {
Map<String, Map<String, List<TranslationImport>>> var =
new HashMap<String, Map<String, List<TranslationImport>>>();
Foo foo = new Foo(var);
}
}
class FooParent {
FooParent(Map<String, ?> variable) {
System.out.println("FooParent constructor");
}
}
class TranslationImport {
}
没有Java 7,请:) – cbaby 2012-07-11 17:36:52
如果试试这个:Map>> –
Razvan
2012-07-11 17:39:34
修改超类以正确使用泛型! – 2012-07-11 17:41:21