介紹 Elastic Stack 是一個可以幫助我們構建搜索體驗、解決問題並取得成功的搜索平臺。核心產品包括 Elasticsearch、Kibana、Beats 和 Logstash(也稱為 ELK Stack)等等。能夠安全可靠地獲取任何來源、任何格式的數據,然後實時地對數據進行搜索、分析和可視 ...
轉發:
http://www.java265.com/JavaCourse/202205/3348.html
下文筆者講述isAssignableFrom()方法的功能簡介說明
isAssignableFrom()方法簡介
isAssignableFrom()方法:
這是一個native方法,他是Class類對象中的一個方法
isAssignableFrom()方法的功能:
用於檢測一個類是否繼承於一個類
例:
A.isAssignableFrom(B)
確定一個類(B)是不是繼承來自於另一個父類(A)
一個介面(A)是不是實現了另外一個介面(B)或兩個類相同
父子繼承關係測試 class A{ } class B extends A{ } class C extends B{ } public class test { public static void main(String[] args) { A a = new A(); B b = new B(); B b1 = new B(); C c = new C(); System.out.println(a.getClass().isAssignableFrom(a.getClass())); System.out.println(a.getClass().isAssignableFrom(b.getClass())); System.out.println(a.getClass().isAssignableFrom(c.getClass())); System.out.println(b1.getClass().isAssignableFrom(b.getClass())); System.out.println(b.getClass().isAssignableFrom(c.getClass())); System.out.println("====================================="); System.out.println(A.class.isAssignableFrom(a.getClass())); System.out.println(A.class.isAssignableFrom(b.getClass())); System.out.println(A.class.isAssignableFrom(c.getClass())); System.out.println("====================================="); System.out.println(Object.class.isAssignableFrom(a.getClass())); System.out.println(Object.class.isAssignableFrom(String.class)); System.out.println(String.class.isAssignableFrom(Object.class)); } } 運行結果如下: true true true true true ===================================== true true true ===================================== true true false
從以上代碼上可以看出 C繼承於B B繼承於A 那麼任何一個類都可以isAssignableFrom其本身 父類可以由子類裝換而來也是沒有問題的 所以A可以由B裝換而來,同時也可以由子類的子類轉換而來
例:介面的實現關係
interface InterfaceA{ } class ClassB implements InterfaceA{ } class ClassC implements InterfaceA{ } class ClassD extends ClassB{ } public class InterfaceTest { public static void main(String[] args) { System.out.println(InterfaceA.class.isAssignableFrom(InterfaceA.class)); System.out.println(InterfaceA.class.isAssignableFrom(ClassB.class)); System.out.println(InterfaceA.class.isAssignableFrom(ClassC.class)); System.out.println(ClassB.class.isAssignableFrom(ClassC.class)); System.out.println("============================================"); System.out.println(ClassB.class.isAssignableFrom(ClassD.class)); System.out.println(InterfaceA.class.isAssignableFrom(ClassD.class)); } } 輸出結果如下: true true true false ============================================ true true
B實現了介面A D繼承了B 實際上D是可以上轉為A介面的 相當於D間接實現了A 這裡也說明瞭一點 其實繼承關係和介面實現關係 在isAssignableFrom()的時候是一樣的
isAssignableFrom:
是用來判斷子類和父類的關係的,或介面的實現類和介面的關係的
預設所有的類的終極父類都是Object
當A.isAssignableFrom(B)結果是true,則說明B可以轉換成為A,也就是A可以由B轉換而來