[英]Java generic: Unchecked cast
我必须使用 Java 17 (LTS)。
以下代码工作正常,但我有以下警告:
Unchecked cast...
无论我在课堂上做什么,我都无法摆脱这个警告。
出现警告的 class :
public abstract class Parser<T> {
protected static <T> Parser<T> build(Class<T> parserType, InputArgGroup arguments) {
Parser<T> parser;
if (parserType.isAssignableFrom(Name.class)) {
parser = (Parser<T>) new NameParser(); <- UNCHECKED CAST: x.NameParser to x.Parser<T>
} else {
parser = (Parser<T>) new AddressParser(); <- UNCHECKED CAST: x.AddressParser to x.Parser<T>
}
parser.hasTitle(arguments.hasTitle());
parser.hasHeader(arguments.hasHeader());
parser.setDateTimePattern(arguments.getDateTimePattern());
...
return parser;
}
... common methods ...
public abstract List<T> parse(String file);
}
解析器 1:
public class NameParser extends Parser<Name> {
@Override
public List<Name> parse(String file) {
System.out.println("parse name CSV");
return null;
}
}
解析器 2:
public class AddressParser extends Parser<Address> {
@Override
public List<Address> parse(String file) {
System.out.println("parse address CSV");
return null;
}
}
测试:
public class Aaa {
public Aaa() {
var addressParser = Parser.build(Address.class, ...);
var nameParser = Parser.build(Name.class, ...);
List<Address> addresses = addressParser.parse("addresses.csv");
List<Name> names = nameParser.parse("names.csv");
}
public static void main(String[] args) {
new Aaa();
}
}
任何帮助表示赞赏。
这只是一个警告,让您知道编译器不能保证强制转换在运行时不会失败。 你知道它会起作用,但编译器还不够复杂,无法弄清楚。
使用注释抑制警告。
@SuppressWarnings("unchecked")
protected static <T> Parser<T> build(Class<T> parserType, InputArgGroup arguments) {
// ...
}
使用这个注解并没有绕过编译器——你得到一个警告,在分析和运行测试之后,你验证了强制转换在运行时永远不会失败,你添加这个注解来记录分析和发现。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.