泛型对象可以实例化吗?

不可以,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泛型实例化的资料请关注云海天教程其它相关文章!

原文链接:https://www.cnblogs.com/billshen/p/13257770.html

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

  1. java泛型实例化_java基础-泛型举例详解

    泛型 泛型是JDK5.0增加的新特性,泛型的本质是参数化类型,即所操作的数据类型被指定为一个参数.这种类型参数可以在类.接口.和方法的创建中,分别被称为泛型类.泛型接口.泛型方法. 一.认识泛型 在没 ...

  2. java泛型方法 通配符_Java泛型教程–示例类,接口,方法,通配符等

    java泛型方法 通配符 泛型是Java编程的核心功能之一,它是Java 5中引入的.如果您使用的是Java Collections ,并且版本5或更高版本,则可以肯定使用了它. 将泛型与集合类一起使 ...

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

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

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

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

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

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

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

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

  7. java 静态方法 实例化_java静态方法和实例化方法的区别(copy)

    [资料来源] 方法是我们每天都在写得,很多程序员大多都使用实例化方法,而很少使用静态方法,问原因也说不出来所以然,或者简单的回答两者定义的区别,静态方法不需要new就可以使用 实例化方法需要new了以 ...

  8. java泛型方法作用_java泛型的作用与使用方法是什么?

    泛型,即"参数化类型".一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参.那么参数化类型怎么理解呢?顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变 ...

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

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

最新文章

  1. jenkins php build,使用 Jenkins 自动化发布 PHP 项目
  2. 序列化和反序列化--转
  3. K8S Deployment脚本部署Tomcat集群
  4. Linux 网络编程四(socket多线程升级版)
  5. 我的世界java无法安装包_手把手教你搭建java环境
  6. 趣挨踢 | 跳槽季,让我们一起攻克算法吧!
  7. 微软发布新品被指剽窃!交涉无果,两年开源项目被迫终结
  8. 利用display属性写的遮罩层
  9. 回炉重造-数据结构之数组列表
  10. 柯达新款Wi-Fi数码相机闪亮登场
  11. 苏宁易购第二次债券购回基本方案:购回资金总额20亿元
  12. 分类算法之邻近算法:KNN(应用篇)
  13. window自带放大镜解决高分辨率下的字体缩小问题
  14. 6.4 随机森林实战
  15. oracle的时间取的到底是谁的时间
  16. Html5 学习系列(三)增强型表单标签
  17. 拉钩网前端项目实战01
  18. 使用prettier统一编码风格
  19. 动画:面试官问我 JS「变量提升」我头皮发麻,最后把这篇动画甩给了他
  20. 汉王速录笔linux驱动下载,汉王速录笔v586s驱动

热门文章

  1. win7计算机浏览记录怎么删除,Win7旗舰版系统删除本地浏览记录的技巧
  2. 安装VS2010的过程遇到VC10.0 Runtime组件安装失败怎么解决
  3. 参加“全球敏捷运维峰会(北京站)”有感
  4. 2020年 ICLR 国际会议最终接受论文(poster-paper)列表(二)
  5. 综合评价理想解法(TOPSIS解法)
  6. (38)DWD层事实表创建
  7. thymeleaf笔记
  8. 挂一漏万——交通相关微信公共账号(V1)
  9. 2022,又一批AI大牛从大厂出走了
  10. Kotlin let with run apply also filter if常规用法笔记