Java 中,类、类对象、泛型之间的转换
Java 中,類、類對象、泛型之間的轉(zhuǎn)換
- R 為非泛型
- 獲得類
- 通過類型名來獲得類
- 通過對象來獲得類
- 通過類名字符串來獲得類
- 通過類來獲得類名字符串
- 通過類來獲得對象
- 使用 R 的無參數(shù)構(gòu)造器來創(chuàng)建對象
- 使用 R 的有參數(shù)構(gòu)造器來創(chuàng)建對象
- T 為泛型
- 通過泛參來得到 Class 對象
- 通過泛參來創(chuàng)建實(shí)例對象
- 通過泛型非空引用來得到 Class 對象
- 通過 Class 對象來得到泛參
- 通過 Class 對象來創(chuàng)建實(shí)例對象
- 使用 T 的無參數(shù)構(gòu)造器來創(chuàng)建對象
- 使用 T 的有參數(shù)構(gòu)造器來創(chuàng)建對象
R 為非泛型
??這里說的類是指某個(gè)對象所屬的類所對應(yīng)的類 Class<?> 的對象。
獲得類
通過類型名來獲得類
??已有某類的一個(gè)類型名 R(R不是泛型形參,而是某個(gè)具體的類型名),來得到該類名字符串所對應(yīng)的類 Class<R> 的對象:
// “通過類型名來獲得類” Class<R> targetClass = R.Class; // 這里 R 不是泛型形參,而是某個(gè)具體的類型名通過對象來獲得類
??已有一個(gè)類型名為 R(R不是泛型形參,而是某個(gè)具體的類型名)的對象,來得到該對象所屬的類所對應(yīng)的類 Class<R> 的對象:
// rObject 為已有對象,函數(shù) getRObject 代表一個(gè)返回類 R 對象的函數(shù) R rObject = getRObject();// “通過類對象來獲得類” Class<R> targetClass = rObject.getClass();通過類名字符串來獲得類
??已有類 R 的類名字符串,來得到該類名字符串所對應(yīng)的類 Class<R> 的對象:
// className為已有類名字符串,函數(shù) getClassRName 代表一個(gè)返回一個(gè)類名字符串的函數(shù) String className = getClassRName();// “通過類名字符串來獲得類” Class<R> targetClass = Class.forName(className);通過類來獲得類名字符串
??已有某類所對應(yīng)的 Class<R> 對象,來得到該類類名:
// classR 為已有 Class 對象,函數(shù) getClassR 代表一個(gè)返回 R 類對象的函數(shù) Class<R> classR = getClassR();// “通過類來獲得類名字符串” String className = classR.getName();通過類來獲得對象
??已有一個(gè) Class<R> 對象,來得到一個(gè)類型為R的對象:
使用 R 的無參數(shù)構(gòu)造器來創(chuàng)建對象
// classR 為已有 Class 對象,函數(shù) getClassR 代表一個(gè)返回 R 類對象的函數(shù) Class<R> classR = getClassR();// “通過類來獲得類對象”:使用 R 的無參數(shù)構(gòu)造器來創(chuàng)建對象 Object targetObj = classR.getConstructor().newInstance();使用 R 的有參數(shù)構(gòu)造器來創(chuàng)建對象
??設(shè) R 的某個(gè)構(gòu)造器的參數(shù)分別為類A、類B的對象。類 A、類 B 均有公有的無參數(shù)構(gòu)造器,且 A、B 均不是泛型(變量):
// classR 為已有 Class 對象,函數(shù) getClassR 代表一個(gè)返回 R 類對象的函數(shù) Class<R> classR = getClassR();// “通過類來獲得類對象”:使用 R 的有參數(shù)構(gòu)造器來創(chuàng)建對象 Object targetObj = classR.getConstructor(A.class, B.class).newInstance(aObject, bObject);T 為泛型
通過泛參來得到 Class 對象
??已有泛型變量 T,來得到對應(yīng)的 Class<T> 對象:
??沒有這種辦法。必須通過外部主動提供泛型變量 T 的已實(shí)例化的對象,才能得到對應(yīng)的 Class<T> 對象。因?yàn)轭愋筒脸仍?#xff0c;以下這幾種都是錯(cuò)誤的:
- 錯(cuò)誤示例1:
- 錯(cuò)誤示例2:
通過泛參來創(chuàng)建實(shí)例對象
??已有泛型變量 T,來得到對應(yīng)的類型為 T 的對象:
??沒有這種辦法。必須通過泛型變量 T 對象的 Class<T> 對象,才能得到對應(yīng)的類型為 T 的對象。因?yàn)轭愋筒脸仍?#xff0c;以下這幾種都是錯(cuò)誤的:
- 錯(cuò)誤示例1:
- 錯(cuò)誤示例2:
通過泛型非空引用來得到 Class 對象
??已有泛型變量 T 的非空引用,來得到對應(yīng)的 Class<T> 對象:
// T 為泛型類中設(shè)置的泛型變量,函數(shù) getRObject 代表一個(gè)返回類 R 對象的函數(shù) T genericObject = getRObject();// “通過泛型非空引用來得到 Class 對象” Class<T> targetClass = (Class<T>) genericObject.getClass();通過 Class 對象來得到泛參
??已有 Class<T> 對象,來取出其中的泛型形參 T:(不過,由于 Java 中的類型擦除,一般得到泛型變量沒什么用。)
// “通過 Class 對象來得到泛型變量” // classT 為已有 Class 對象,函數(shù) getClassT 代表一個(gè)返回 Class 對象的函數(shù) Class<T> classT = getClassT(); // 現(xiàn)在,T 即為需要的泛型變量通過 Class 對象來創(chuàng)建實(shí)例對象
??已有 Class<T> 對象,來得到對應(yīng)的類型為 T 的對象:
使用 T 的無參數(shù)構(gòu)造器來創(chuàng)建對象
// classT 為已有 Class 對象,函數(shù) getClassT 代表一個(gè)返回 Class 對象的函數(shù) Class<T> classT = getClassT(); // “通過類來獲得類對象”:使用 T 的無參數(shù)構(gòu)造器來創(chuàng)建對象 Object targetObj = someClass.getConstructor().newInstance();使用 T 的有參數(shù)構(gòu)造器來創(chuàng)建對象
??設(shè) T 的某個(gè)構(gòu)造器的參數(shù)分別為類 A、類 B 的對象。類 A、類 B 均有公有的無參數(shù)構(gòu)造器,且 A、B 均不是泛型(變量):
// classT 為已有 Class 對象,函數(shù) getClassT 代表一個(gè)返回 Class 對象的函數(shù) Class<T> classT = getClassT(); // aObject 為已有對象,函數(shù) getFirstParameter 代表一個(gè)返回 A 對象的函數(shù) A aObject = getFirstParameter(); // bObject 為已有對象,函數(shù) getSecondParameter 代表一個(gè)返回 B 對象的函數(shù) B bObject = getSecondParameter();// “通過類來獲得類對象”:使用 T 的有參數(shù)構(gòu)造器來創(chuàng)建對象 Object targetObj = classT.getConstructor(A.class, B.class).newInstance(aObject, bObject); 超強(qiáng)干貨來襲 云風(fēng)專訪:近40年碼齡,通宵達(dá)旦的技術(shù)人生總結(jié)
以上是生活随笔為你收集整理的Java 中,类、类对象、泛型之间的转换的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 将 C++ 中的 goto 语句转化为非
- 下一篇: Java 中的某些方法为什么要求传入一个