更新時間:2022-04-12 10:29:00 來源:動力節(jié)點 瀏覽15647次
在Java這種強類型語言中,經(jīng)常會遇到類型轉(zhuǎn)換、類型判斷。今天動力節(jié)點小編就來盤點一下Java中判斷類型的方式。
instanceof是一個Java運算符,用來判斷一個對象是否是一個類的實例。用法 :
boolean isInstance = obj instanceof Class
其中 obj 對于對象實例,Class 對于類名或者接口名,當 obj 通過 Class Example,或者其子類實例,或者其接口的實現(xiàn)類實例,全部返回 true,否則返回false。
需要注意的是,obj 必須是引用類型,不能是基本類型,下面的公式不能編譯:
int integer = 0;
// Error will be reported at compile time
boolean isInstance = integer instanceof Number
另外,編譯器會檢查instanceof表達式 obj 中是否可以轉(zhuǎn)換為右邊的Class類型,如果不能轉(zhuǎn)換直接報錯,如果不能確定類型,也會編譯。
// Class.isInstance Equivalent to instanceof The operator
boolean ret = entity instanceof UserInfo;
boolean isInstance = UserInfo.class.isInstance(entity);
如上圖Class.isInstance 等價于instanceof 運算符。如果參數(shù)不是null, 并且不觸發(fā)也可以,ClassCastException如果成功轉(zhuǎn)換為左邊的引用類型,就會返回true。
該方法的調(diào)用者和參數(shù)是Class對象,調(diào)用者是父類,參數(shù)是自身或其子類。
boolean assignableFrom = List.class.isAssignableFrom(ArrayList.class);
常用于判斷父子關(guān)系,Mybatis 插件教程中使用這個方法來判斷一個類是否是接口的實現(xiàn)類。
該方法主要用于判斷Class是否為原始類型(boolean、char、byte、short、int、long、float、double)。
//true
boolean primitive = int.class.isPrimitive();
請注意,基類型的包裝器類型。如果使用此方法確定結(jié)果,則返回 false。
這類判斷除前兩種外都很常見,后兩種機會有限。