1. 程式人生 > 其它 >關於JAVA中的Class.cast方法

關於JAVA中的Class.cast方法

技術標籤:javajavaobjectclass

前言

今天在閱讀專案程式碼時候,發現了Class類的方法cast() ,出於興趣閱讀了一下原始碼,將心得感受寫出來分享一下。


1、先定義一個介面 Tree

//抽象出 一個父類  即使 沒有這個也沒事  可以返回object  這個萬類之父
public interface Tree {
    //輸出自己的品種
    void sout();
    //空物件模式 需要的
    boolean isNUll();
}

2、再建立兩個實現類 Apple 和Banana

//AppleTree的實現類
public class AppleTree
implements Tree { @Override public void sout() { System.out.println("我是蘋果樹"); } @Override public boolean isNUll() { return false; } } //BananaTree的實現類 public class BananaTree implements Tree { @Override public void sout() { System.out.
println("我是香蕉樹"); } @Override public boolean isNUll() { return false; } }

3.重點部分

public class CastMain {
    public static void main(String[] args) {

        AppleTree appleTree = new AppleTree();

        Tree one = Tree.class.cast(appleTree);
        one.sout()
; //強制型別轉換 Tree force = (Tree) appleTree; force.sout(); Tree two = BananaTree.class.cast(appleTree); two.sout(); } }

執行這部分程式碼,結果如下。
在這裡插入圖片描述


呼叫了兩次 apple類的方法,到 Tree two = BananaTree.class.cast(appleTree); 拋異常了。異常告訴我們 Banana 不能轉換成 Apple。

到這裡 有的人就明白了 Tree one = Tree.class.cast(appleTree); 不就是強制轉換麼? 我可以肯定的告訴你 。嗯 是的 就是強制轉換型別

4.總結

這裡我們來看一下原始碼

    @SuppressWarnings("unchecked")
    public T cast(Object obj) {
        if (obj != null && !isInstance(obj))
            throw new ClassCastException(cannotCastMsg(obj));
        return (T) obj;
    }

原始碼裡面 將得到的obj 用T泛型 強制轉換了,至於T泛型 在哪裡定義的public final class Class<T> implements java.io.Serializable, GenericDeclaration, Type, AnnotatedElement

也就是說呢 Tree.class 和Class< Tree> 兩者是等價

綜上所述:Class.cast(Object obj)方法 就是作用就是強制型別轉換。將obj轉化成T型別。