1. 程式人生 > >Java中Class類中兩個值得注意的進行型別動態轉換的方法

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 

ClassCastException if it is not. If this method succeeds, it always returns a reference to this class object.

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()

public T cast(Object obj)

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來指定具體表示的是哪種型別。

相關推薦

JavaClass值得注意進行型別動態轉換方法

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

JavaScriptsetTimeout()和setInterval()定時器的區別和使用方法

兩者最直接的區別是: setTimeout()在載入後延遲指定時間去執行一次表示式,只是一次。 setInterval()它從載入後,每隔指定的時間就執行一次表示式 所以要讓一段程式碼, 某個函式以固定頻率重複執行應該使用setInterval()函式 如果讓一段程式碼, 某個函式在

phpclass的詳細用法

一,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);

Androidsystem.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反射之——JavaClass的使用

Java語言中,萬事萬物皆物件,但是靜態成員、基本的資料型別(基本的資料型別也有自己的包裝類)等並不是物件,因為靜態的變數和函式屬於類,我們可以通過 類.靜態變數 / 類.靜態函式等方式呼叫。 public class Test {     private st

javalist排序和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的

JavaClass詳解、用法以及泛化

在前面我們將類的載入的時候,類載入一共有5步,載入,驗證,準備,解析和初始化。其中載入階段,除了將位元組碼載入到方法區,還生成了這個了的Java.lang.Class物件。那麼這個Class物件到底有什麼用呢? 前面的關於反射的文章,我們多次都用到了Class類,可以用這個

Java產生隨機數的方法

方法一、Math類有個random方法可以實現隨機數的生成。Math.random()返回的是:返回帶正號的 double 值,該值大於等於 0.0 且小於 1.0。在此基礎上我們修改下就能得到一定範圍的隨機數: (int)(Math.random()*10)返回0到9的隨

javaClass原始碼

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