在java中的向上转换和向下转换

Sum*_*hra 4 java

我可以理解向上转播是什么,但是向下倾斜有点令人困惑.我的问题是我们为什么要贬低?你能帮我一个实时的例子吗?倾心那么重要吗?

Sea*_*oyd 9

向下转换是一种必要的恶魔,例如在处理返回非泛型集合的旧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;
    }

    // ...

}
Run Code Online (Sandbox Code Playgroud)

我想不出一个例子,其中Upcasting是必要的.好的,从方法中返回最不具体的可能Object是一个好习惯,但这可以完全不用强制转换完成:

public Collection<String> doStuff(){
    // no casting needed
    return new LinkedHashSet<String>();
}
Run Code Online (Sandbox Code Playgroud)