【发布时间】:2017-03-05 06:46:13
【问题描述】:
这是一个正确编译的代码
public enum SupportedConversions {
INTEGER {
@Override
public Integer convert( String ion, Object[] aa) {
return null;
}
},
LONG {
@Override
public Long convert(final String ion, Object[] aa) {
return null;
}
};
public abstract <T> T convert(String val, Object[] aa);
}
但是当我将抽象函数参数更改为对象列表而不是数组时,我收到编译错误消息“方法不会从超类覆盖”。只有当返回类型是泛型时才会发生这种情况
错误代码示例
public enum SupportedConversions {
INTEGER {
@Override
public Integer convert( String ion, List<Object> aa) {
return null;
}
},
LONG {
@Override
public Long convert(final String ion, List<Object> aa) {
return null;
}
};
public abstract <T> T convert(String val, List<Object> aa);
}
这是否有原因不起作用。看起来更像是 Java 中的一个错误
【问题讨论】:
-
这很奇怪,但我确信这是完全合乎逻辑的原因。如果从
List中删除类型参数,编译器错误就会消失。或者您可以将类型参数设置为T。带有数组的版本发出以下警告:“未经检查的覆盖:返回类型需要未经检查的转换。找到'java.lang.Long',需要'T'” -
是的,如果我在覆盖方法中删除显式类型的列表,编译错误就会消失。
标签: java generics enums java-8