java泛型方法实例化_Java泛型实例化 Java让泛型实例化的方法

迈不过友情╰ 2022-11-08 14:24 272阅读 0赞

泛型对象可以实例化吗?

不可以,T t=new T()是不可以的,编译器会报错。由于泛型擦除,编译器在编译时无法确定泛型所对应的真实类型

9c6119699599f7cfca12dad8c2393644.png

解决方法

使用反射新建实例

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) typeArray[0];

}

}

执行结果

8bc3bb3d046e798aca627c807c4a7c48.png

控制台输出

fa1f1d133fe5fe3747b90c29911a9a0a.png

完整代码

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 {

public Class 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) typeArray[0];

user= clazz.newInstance();

}

}

}

@Override

public String toString() {

return “Dao{“ +

“user=” + user.toString() +

‘}‘;

}

}

class UserDao extends Dao {

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 + ‘\‘’ +

‘}‘;

}

}

相关文章

发表评论

表情:
评论列表 (有 0 条评论,272人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Java实例总结

    前言: 当我们在做项目的时候 ,搭建框架的时候,会经常用到泛型类来封装一些通用类或工具类。在封装泛型类的过程中,为了提升开发效率及代码简洁,会经常运用泛型内部进行实例化,用以减