[英]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.