Java中Class類中兩個值得注意的進行型別動態轉換的方法
Java中的Class類有兩個重要的方法:cast()和asSubclass()。這兩個方法都是用於Class類進行執行時(run-time)階段的型別轉換的。下面來看看他們的定義和使用:
第一個方法asSubclass()
public <U> Class<? extends U> asSubclass(Class<U> clazz)
Casts this Class object to represent a subclass of the class represented by the specified class object. Checks that that the cast is valid, and throws a
This method is useful when a client needs to "narrow" the type of a Class object to pass it to an API that restricts the Class objects that it is willing to accept. A cast would generate a compile-time warning, as the correctness of the cast could not be checked at runtime (because generic types are implemented by erasure).
Returns:
this Class object, cast to represent a subclass of the specified class object.
Throws:
ClassCastException - if this Class object does not represent a subclass of the specified class (here "subclass" includes the class itself).
Since:
1.5
使用例項:
Class<?> c = Class.forName(“MyClass”);
Class<Child> child = c.asSubClass(Father.class); // “Child” extends “Father”
第二個方法cast()
Casts an object to the class or interface represented by this Class object.
Parameters:
obj - the object to be cast
Returns:
the object after casting, or null if obj is null
Throws:
ClassCastException - if the object is not null and is not assignable to the type T.
Since:
1.5
使用例項:
這個函式可以簡單的理解為將一個Object型別的物件轉換成Class表示的型別的物件(其實在java中Class類就是所有型別位元組碼的一種抽象,或者簡單理解為在java中就是用於來說明型別的型別,因為java中一切都是類,所以“類”(型別)也是是類,而這個類就是Class)。
Class<String> c = String.class;
Object o = “hello world!”;
String s = c.cast(o); // 將Object型別轉成這裡的Class表示的型別,即String型別
Java中的Class類可以表示java中的所有型別,主要通過Class<T>中的T來指定具體表示的是哪種型別。
相關推薦
Java中Class類中兩個值得注意的進行型別動態轉換的方法
Java中的Class類有兩個重要的方法:cast()和asSubclass()。這兩個方法都是用於Class類進行執行時(run-time)階段的型別轉換的。下面來看看他們的定義和使用: 第一個方法asSubclass() public <U> Clas
java.lang.Class類中的某些方法
getc 不定 sys etc .get out 類名 ont class類 反射的代碼會經常遇到,Class類中方法真的多,且用的少,大多用在底層源碼這塊,既然看到了,就記錄一下吧,說不定以後厲害了,自己封裝框架,haha getComponentType()方法: S
JavaScript中setTimeout()和setInterval()兩個定時器的區別和使用方法
兩者最直接的區別是: setTimeout()在載入後延遲指定時間去執行一次表示式,只是一次。 setInterval()它從載入後,每隔指定的時間就執行一次表示式 所以要讓一段程式碼, 某個函式以固定頻率重複執行應該使用setInterval()函式 如果讓一段程式碼, 某個函式在
php中class類中的詳細用法
一,php中類的建構函式和解構函式 1,建構函式用於初始化,用—construct()可以帶引數 2,解構函式不能帶引數,(用於在消去一個類之前執行一些操作或者功能),使用—destruct() 3,php不會自動呼叫父類的建構函式,(不支援建構函式過載),必須使用pare
給定兩個整型變數的值,將兩個值得內容進行交換。
1.利用新的變數進行替換,程式碼如下: int main() { int a = 10; int b = 90; int tmp = 0; tmp = a; a = b; b = tmp; printf("%d %d", a, b);
Android中system.img的兩種格式raw,sparse及其相互轉換方法
搞Android的同學經常會接觸到system.img。但是該檔案經常以兩種格式出現:raw和sparse。 一種是raw ext4 image,即經常說的raw image,使用file觀察它: 其特點是完整的ext4分割槽映象(包含很多全零的無效填充區),可以直接使用mo
兩個字串的編輯距離-動態規劃方法
概念 字串的編輯距離,又稱為Levenshtein距離,由俄羅斯的數學家Vladimir Levenshtein在1965年提出。是指利用字元操作,把字串A轉換成字串B所需要的最少運算元。其中,字元操作包括: 刪除一個字元 a) Insert a charac
如果在一個標簽上兩類並用,css樣式表中引用時,兩個類必須寫在一起,不能有空格。
nbsp clas div 樣式表 ext style borde 引用 order 例: <html> <style type="text/css"> .mui-table-view-cell.mui-collapse{ bo
關於偽類選擇器中一個冒號和兩個冒號的區別
fault 兼容 content 中一 radi view get top AD 只要兼容現代瀏覽器如 webkit、firefox、opera等瀏覽器,對於偽元素采用雙冒號的寫法,要是非要兼容IE瀏覽器,用CSS2的單冒號寫法比較安全。 首先,閱讀 w3c 對兩者的定義:
實現一個類,把冒泡和插入封裝到兩個函式中去(宣告兩個函式,一個是冒泡,一個是插入),且進行呼叫和除錯
實現一個類,把冒泡和插入封裝到兩個函式中去(宣告兩個函式,一個是冒泡,一個是插入),且進行呼叫和除錯 import java.util.Arrays; /* * 實現一個類,把冒泡和插入封裝到兩個函式中去(宣告兩個函式,一個是冒泡,一個是插入),且進行呼叫和除錯 */ public class E
在Java中,如何把兩個String[]合併為一個 與 list 合併有異曲同工之妙
在Java中,如何把兩個String[]合併為一個? 看起來是一個很簡單的問題。但是如何才能把程式碼寫得高效簡潔,卻還是值得思考的。這裡介紹四種方法,請參考選用。 一、apache-commons 這是最簡單的辦法。在apache-commons中,有一個ArrayUtils.addAll
編寫一個Java 應用程式,計算兩個大整數的和、差、積和商,並計算一個大整數的因 子個數(因子中不包括1 和大整數本身)。
1 package ex6_2; 2 import java.math.BigInteger; 3 4 public class BigintegerExample { 5 public static void main(String[] args) { 6
Java反射之——Java中Class類的使用
Java語言中,萬事萬物皆物件,但是靜態成員、基本的資料型別(基本的資料型別也有自己的包裝類)等並不是物件,因為靜態的變數和函式屬於類,我們可以通過 類.靜態變數 / 類.靜態函式等方式呼叫。 public class Test { private st
java中list排序和兩個string的大小比較
此文章簡單記錄一波: list排序方法一Comparator形式: List<String> keyList = new ArrayList<>(); keyList.add("User_Tel"); keyList.add("SystemId"); keyList.
Spring中最核心的兩個類。
一、DefaultListableBeanFactory XmlBeanFactory繼承自DefaultListableBeanFactory,而DefaultListableBeanFactory是整個bean載入的核心部分,是Spring註冊及載入bean的預設實現,
java中按順序執行兩個執行緒的方法
比如有執行緒A和B,在A執行完成後B再開始執行 線上程A run方法最後啟動執行緒B - - 共享一個volatile boolean型別的標識變數,B一直檢查該變數的值,而A則在執行完成後改變A的
Java中Class類詳解、用法以及泛化
在前面我們將類的載入的時候,類載入一共有5步,載入,驗證,準備,解析和初始化。其中載入階段,除了將位元組碼載入到方法區,還生成了這個了的Java.lang.Class物件。那麼這個Class物件到底有什麼用呢? 前面的關於反射的文章,我們多次都用到了Class類,可以用這個
Java中產生隨機數的兩個方法
方法一、Math類有個random方法可以實現隨機數的生成。Math.random()返回的是:返回帶正號的 double 值,該值大於等於 0.0 且小於 1.0。在此基礎上我們修改下就能得到一定範圍的隨機數: (int)(Math.random()*10)返回0到9的隨
java中Class類原始碼
package java.lang; import java.lang.reflect.AnnotatedElement; import java.lang.reflect.Array; import java.lang.reflect.GenericArrayType; import jav
java中一個類中能如何宣告多個構造方法
public class A{public A(){} //構造1public A(i