我可以理解什么是向上转换,但是向下转换有点令人困惑。我的问题是为什么我们应该垂头丧气?您能帮我做一个实时的例子吗?垂头丧气那么重要吗?
最佳答案
向下转换是一个必不可少的弊端,例如,在处理返回非通用集合的旧式API时。另一个经典示例是equals方法:
public class Phleem{
public Phleem(final String phloom){
if(phloom == null){
throw new NullPointerException();
}
this.phloom = phloom;
}
private final String phloom;
public String getPhloom(){
return phloom;
}
@Override
public boolean equals(final Object obj){
if(obj instanceof Phleem){
// downcast here
final Phleem other = (Phleem) obj;
return other.phloom.equals(phloom);
}
return false;
}
// ...
}
我想不出需要向上转换的示例。好的,从方法中返回最不具体的Object是一个好习惯,但这完全可以在不进行强制转换的情况下完成:
public Collection<String> doStuff(){
// no casting needed
return new LinkedHashSet<String>();
}