java实例化泛型_Java让泛型实例化的方法
泛型对象可以实例化吗?
不可以,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让泛型实例化的方法相关推荐
- java wait 参数_java中wait()和join()方法的区别是什么
java中wait()和join()方法的区别是:存在不同的java包中:wait()方法用于线程间通信,它所施加的等待状态的线程可以被启动:join()方法用于在多个线程之间添加排序,它所施加的等待 ...
- java拆分日期_java实现日期拆分的方法
java实现日期拆分的方法 本文实例讲述了java实现日期拆分的方法.分享给大家供大家参考.具体如下: 如:计算6-1至6-5之间的日期天数及具体日期,预期的结果是得到: 6-1 6-2 6-3 6- ...
- java 释放一个对象_JAVA中销毁一个对象的方法
方法一:垃圾回收器 垃圾回收器是Java平台中用的最频繁的一种对象销毁方法.垃圾回收器会全程侦测Java应用程序的运行情况.当反先有些对象成为垃圾时,垃圾回收器就会销毁这些对象,并释放这些对象所占用的 ...
- java之泛型_java之泛型
什么是泛型? 泛型是JDK1.5新加入的,解决数据类型的安全性问题,其主要原理是在类声明时通过一个标识表示类中某个属性的类型或者是某个方法的返回值及参数类型.这样在类声明或实例化时只要指定好需要的具体 ...
- java 文件通配符_Java中泛型通配符的使用方法示例
本文实例讲述了Java中泛型通配符的使用方法.分享给大家供大家参考,具体如下: 一 点睛 引入通配符可以在泛型实例化时更加灵活地控制,也可以在方法中控制方法的参数. 语法如下: 泛型类名 extend ...
- java中什么时候不能用泛型_java中泛型的正确使用姿势
image.png 泛型是Java中一个非常重要的知识点,在Java集合类框架中泛型被广泛应用.利用好泛型,在系统架构中是一把利器. 泛型类 先看一个例子,restful架构中,需要定义api接口返回 ...
- java支持泛型_Java自学-泛型 支持泛型的类
Java 如何设计支持泛型的类 步骤 1 : 不支持泛型的Stack 以Stack栈为例子,如果不使用泛型 当需要一个只能放Hero的栈的时候,就需要设计一个HeroStack 当需要一个只能放Ite ...
- java interface泛型_java – 使用泛型和接口实现组合
我正在努力实现以下目标: 我的类X有一个通用的Y.然而,这个泛型Y需要访问X的资源,我想通过接口来处理它,以便允许其他人继承任意选择的类. 然而,我目前的方法会产生一系列泛型: public inte ...
- java 通配符 泛型_java中泛型之类型通配符(?)
实体类 package cn.xy.model; /** * 生物类 * @author xy * */ public class Living { private String name; publ ...
- java 类型通配符_java中泛型之类型通配符(?)
实体类 package cn.xy.model; /** * 生物类 * @author xy * */ public class Living { private String name; publ ...
最新文章
- 精灵动画Animation对话框组成Idle动画的各精灵
- NBIOT 移远BC28模块+stm32开发板例程、教程(打通TCP、COAP协议)
- logistic逻辑回归分类算法及应用
- [luoguP2801] 教主的魔法(二分 + 分块)
- 飞鸽传书 2010Beta2.0正式版预计本月内即可上线
- VS2008SP1中jQuery Intellisense补丁KB958502安装失败的解决办法
- BeginnersBook Java 字符串教程
- linux下编写sql脚本,在Linux系统中编写简易shell脚本,向PLSQL表中插入数据
- 抽象类和接口到底是什么“垃圾“——教你分类
- 电子政务的着力点---紫云舆情服务
- 网络攻防技术——缓冲区溢出攻击实验
- 以太坊地址和公钥_《每日一课》第九课:什么是钱包、钱包地址、私钥、公钥?...
- auto semicolon insertion 自动分号补齐的坑
- 入门神经网络优化算法(五):一文看懂二阶优化算法Natural Gradient Descent(Fisher Information)
- 完整版TCP/UDP第7点
- 分布式Redis集群解决方案
- 如何在html添加悬浮页面,如何设置悬浮窗口?
- 2022最新网络安全零基础学习路线
- iOS中文件连接群晖服务器,教你使用群晖怎么在ios的“家庭‘’App(HomeKit)里添加Hom...
- 觅伊APP产品体验测评:打造真人社交,得女性者得市场