Java讓泛型實例化的方法
泛型對象可以實例化嗎?
不可以,T t=new T()是不可以的,編譯器會報錯。由于泛型擦除,編譯器在編譯時無法確定泛型所對應(yīng)的真實類型

解決方法
使用反射新建實例
Type superclass = getClass().getGenericSuperclass();
ParameterizedType parameterizedType = null;
if (superclass instanceof ParameterizedType) {
parameterizedType = (ParameterizedType) superclass;
Type[] typeArray = parameterizedType.getActualTypeArguments();
if (typeArray != null && typeArray.length > 0) {
clazz = (Class<T>) typeArray[0];
}
}
執(zhí)行結(jié)果

控制臺輸出

完整代碼
package com.learn.genericinstance;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
public class GenericInstanceLearn {
public static void main(String[] args) throws InstantiationException, IllegalAccessException {
UserDao userDao = new UserDao();
System.out.println(userDao.toString());
}
}
class Dao<T> {
public Class<T> clazz;
public T user;
public Dao() throws IllegalAccessException, InstantiationException {
Type superclass = getClass().getGenericSuperclass();
ParameterizedType parameterizedType = null;
if (superclass instanceof ParameterizedType) {
parameterizedType = (ParameterizedType) superclass;
Type[] typeArray = parameterizedType.getActualTypeArguments();
if (typeArray != null && typeArray.length > 0) {
clazz = (Class<T>) typeArray[0];
user= clazz.newInstance();
}
}
}
@Override
public String toString() {
return "Dao{" +
"user=" + user.toString() +
'}';
}
}
class UserDao extends Dao<User> {
public UserDao() throws IllegalAccessException, InstantiationException {
}
@Override
public String toString() {
return super.toString();
}
}
class User {
String name;
public User() {
this.name = "default name";
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
'}';
}
}
以上就是Java讓泛型實例化的方法的詳細(xì)內(nèi)容,更多關(guān)于Java泛型實例化的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
詳解Java LinkedHashMap與HashMap的使用
這篇文章主要通過幾個示例為大家詳細(xì)介紹了Java中LinkedHashMap與HashMap的常見使用和概述,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2022-10-10
Java使用責(zé)任鏈模式處理學(xué)生請假問題詳解
這篇文章主要介紹了Java使用責(zé)任鏈模式處理學(xué)生請假問題,結(jié)合實例形式詳細(xì)分析了責(zé)任鏈模式的概念、原理及Java使用責(zé)任鏈模式處理學(xué)生請假問題的相關(guān)步驟、操作技巧與相關(guān)注意事項,需要的朋友可以參考下2018-04-04
Springboot+hibernate實現(xiàn)簡單的增刪改查示例
今天小編就為大家分享一篇Springboot+hibernate實現(xiàn)簡單的增刪改查示例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-08-08
spring cloud中微服務(wù)之間的調(diào)用以及eureka的自我保護(hù)機(jī)制詳解
這篇文章主要介紹了spring cloud中微服務(wù)之間的調(diào)用以及eureka的自我保護(hù)機(jī)制詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-07-07
Java代理模式實例詳解【靜態(tài)代理與動態(tài)代理】
這篇文章主要介紹了Java代理模式,結(jié)合實例形式詳細(xì)分析了java靜態(tài)代理與動態(tài)代理模式相關(guān)概念、原理、操作技巧與注意事項,需要的朋友可以參考下2019-09-09
解決idea2020.2遇到pom.xml文件報錯maven插件tomcat7的問題
這篇文章主要介紹了idea2020.2遇到pom.xml文件報錯maven插件tomcat7的問題,本文給大家分享解決方法,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-09-09

