我有下面的代码片段,它返回一个类型不匹配错误:的Java扩展类类型
@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,但也没有奏效。
显式类型参数是一个很好的观点,Java 8可以自动调用它吗? – 2014-12-02 20:11:37
这是[Type inference](https://docs.oracle.com/javase/tutorial/java/generics/genTypeInference.html)和[Target Typing](目标打字)(http://docs.oracle.com/javase/tutorial/) java/javaOO/lambdaexpressions.html#target-typing)东西。 – 2014-12-02 20:26:06