我有以下代码片段,它返回类型不匹配错误:
@SuppressWarnings("rawtypes")
public Map<String, Class<? extends SomeClass.SuperClass>> subClass() {
return Collections.singletonMap("hello", SomeClass.SubClass.class);
}
类声明如下所示:
public class SomeClass {
public static abstract class SuperClass { }
public static class SubClass extends SuperClass{ }
}
这会返回类型不匹配错误,指出:
Type mismatch: cannot convert from Map<String,Class<SubClass>> to Map<String,Class<? extends SuperClass>>
为什么会出现这种情况?无论我在 subClass() 的参数化返回类型中使用“? extends SuperClass”还是仅使用“SuperClass”,我仍然会看到同样的错误。我也尝试过扩展 SomeClass,但这也没有奏效。
最佳答案
您的SubClass
是 SuperClass
的子类型,但是Map<String, Class<SubClass>>
不是 Map<String, Class<SuperClass>>
的子类型。更多信息可以查看Generics, Inheritance, and Subtypes
对于 Java SE 7,您可以使用:
return Collections.<String, Class<? extends SomeClass.SuperClass>>singletonMap("hello", SomeClass.SubClass.class);
关于Java扩展类类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27256894/