泛型对象可以实例化吗?

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

解决方法

使用反射新建实例

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];

}

}

执行结果

控制台输出

完整代码

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 + '\'' +

'}';

}

}

以上就是Java让泛型实例化的方法的详细内容,更多关于Java泛型实例化的资料请关注脚本之家其它相关文章!

java实例化泛型_Java让泛型实例化的方法相关推荐

  1. java wait 参数_java中wait()和join()方法的区别是什么

    java中wait()和join()方法的区别是:存在不同的java包中:wait()方法用于线程间通信,它所施加的等待状态的线程可以被启动:join()方法用于在多个线程之间添加排序,它所施加的等待 ...

  2. java拆分日期_java实现日期拆分的方法

    java实现日期拆分的方法 本文实例讲述了java实现日期拆分的方法.分享给大家供大家参考.具体如下: 如:计算6-1至6-5之间的日期天数及具体日期,预期的结果是得到: 6-1 6-2 6-3 6- ...

  3. java 释放一个对象_JAVA中销毁一个对象的方法

    方法一:垃圾回收器 垃圾回收器是Java平台中用的最频繁的一种对象销毁方法.垃圾回收器会全程侦测Java应用程序的运行情况.当反先有些对象成为垃圾时,垃圾回收器就会销毁这些对象,并释放这些对象所占用的 ...

  4. java之泛型_java之泛型

    什么是泛型? 泛型是JDK1.5新加入的,解决数据类型的安全性问题,其主要原理是在类声明时通过一个标识表示类中某个属性的类型或者是某个方法的返回值及参数类型.这样在类声明或实例化时只要指定好需要的具体 ...

  5. java 文件通配符_Java中泛型通配符的使用方法示例

    本文实例讲述了Java中泛型通配符的使用方法.分享给大家供大家参考,具体如下: 一 点睛 引入通配符可以在泛型实例化时更加灵活地控制,也可以在方法中控制方法的参数. 语法如下: 泛型类名 extend ...

  6. java中什么时候不能用泛型_java中泛型的正确使用姿势

    image.png 泛型是Java中一个非常重要的知识点,在Java集合类框架中泛型被广泛应用.利用好泛型,在系统架构中是一把利器. 泛型类 先看一个例子,restful架构中,需要定义api接口返回 ...

  7. java支持泛型_Java自学-泛型 支持泛型的类

    Java 如何设计支持泛型的类 步骤 1 : 不支持泛型的Stack 以Stack栈为例子,如果不使用泛型 当需要一个只能放Hero的栈的时候,就需要设计一个HeroStack 当需要一个只能放Ite ...

  8. java interface泛型_java – 使用泛型和接口实现组合

    我正在努力实现以下目标: 我的类X有一个通用的Y.然而,这个泛型Y需要访问X的资源,我想通过接口来处理它,以便允许其他人继承任意选择的类. 然而,我目前的方法会产生一系列泛型: public inte ...

  9. java 通配符 泛型_java中泛型之类型通配符(?)

    实体类 package cn.xy.model; /** * 生物类 * @author xy * */ public class Living { private String name; publ ...

  10. java 类型通配符_java中泛型之类型通配符(?)

    实体类 package cn.xy.model; /** * 生物类 * @author xy * */ public class Living { private String name; publ ...

最新文章

  1. 精灵动画Animation对话框组成Idle动画的各精灵
  2. NBIOT 移远BC28模块+stm32开发板例程、教程(打通TCP、COAP协议)
  3. logistic逻辑回归分类算法及应用
  4. [luoguP2801] 教主的魔法(二分 + 分块)
  5. 飞鸽传书 2010Beta2.0正式版预计本月内即可上线
  6. VS2008SP1中jQuery Intellisense补丁KB958502安装失败的解决办法
  7. BeginnersBook Java 字符串教程
  8. linux下编写sql脚本,在Linux系统中编写简易shell脚本,向PLSQL表中插入数据
  9. 抽象类和接口到底是什么“垃圾“——教你分类
  10. 电子政务的着力点---紫云舆情服务
  11. 网络攻防技术——缓冲区溢出攻击实验
  12. 以太坊地址和公钥_《每日一课》第九课:什么是钱包、钱包地址、私钥、公钥?...
  13. auto semicolon insertion 自动分号补齐的坑
  14. 入门神经网络优化算法(五):一文看懂二阶优化算法Natural Gradient Descent(Fisher Information)
  15. 完整版TCP/UDP第7点
  16. 分布式Redis集群解决方案
  17. 如何在html添加悬浮页面,如何设置悬浮窗口?
  18. 2022最新网络安全零基础学习路线
  19. iOS中文件连接群晖服务器,教你使用群晖怎么在ios的“家庭‘’App(HomeKit)里添加Hom...
  20. 觅伊APP产品体验测评:打造真人社交,得女性者得市场

热门文章

  1. JAVA小项目--银行管理系统(GUI+数据库mysql)
  2. 2021年焊工作业压力焊考试题库
  3. 连续获两家乘用车前向定点, 又一家国产毫米波雷达企业欲“赶超”外资巨头
  4. 使用JMeter录制脚本并调试
  5. pdf安装 adobe acrobat reader DC
  6. TeamView for Linux是这样实现的!
  7. linux中bzero函数,库函数
  8. python将字典写入txt文件_将一个字典写入txt文件并将其读回来?
  9. Linux中grep详解
  10. Java后台调用第三方支付接口(易宝支付)