我已经实现了这个功能:
static <X,Y> Y castOrNull(X obj) {
try {
return (Y)obj;
}
catch(ClassCastException e) {
return null;
}
}
这给了我编译器警告:
Type safety: Unchecked cast from X to Y
我不太明白。try/catch
我在这里做的不是检查吗?我可以忽略警告吗?
我的功能会按预期工作吗?我将如何正确实施它?
我也尝试过obj instanceof Y
检查,但由于 Java 处理泛型的方式,它不起作用。
顺便说一句,这个函数对我来说似乎很有用(使其他一些代码更干净)。我想知道Java中是否已经存在这样的功能?
我想使用它的一个例子:
void removeEmptyRawStrings() {
for(Iterator<Entity> e = entities.iterator(); e.hasNext();) {
RawString s = castOrNull(e.next());
if(s != null && s.content.isEmpty()) e.remove();
}
}
我的代码中经常出现这样的情况。而且我认为这比其他任何东西都更具可读性和简单性。但是,如果您有任何关于如何使该代码更简单的建议,请给我一个更好的建议。