我可以理解什么是向上转换,但是向下转换有点令人困惑。我的问题是为什么我们应该垂头丧气?您能帮我做一个实时的例子吗?垂头丧气那么重要吗?

最佳答案

向下转换是一个必不可少的弊端,例如,在处理返回非通用集合的旧式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>();
}

09-27 12:17