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泛型实例化的资料请关注云海天教程其它相关文章!
原文链接:https://www.cnblogs.com/billshen/p/13257770.html
java 泛型方法 实例化_Java让泛型实例化的方法相关推荐
- java泛型实例化_java基础-泛型举例详解
泛型 泛型是JDK5.0增加的新特性,泛型的本质是参数化类型,即所操作的数据类型被指定为一个参数.这种类型参数可以在类.接口.和方法的创建中,分别被称为泛型类.泛型接口.泛型方法. 一.认识泛型 在没 ...
- java泛型方法 通配符_Java泛型教程–示例类,接口,方法,通配符等
java泛型方法 通配符 泛型是Java编程的核心功能之一,它是Java 5中引入的.如果您使用的是Java Collections ,并且版本5或更高版本,则可以肯定使用了它. 将泛型与集合类一起使 ...
- java 文件通配符_Java中泛型通配符的使用方法示例
本文实例讲述了Java中泛型通配符的使用方法.分享给大家供大家参考,具体如下: 一 点睛 引入通配符可以在泛型实例化时更加灵活地控制,也可以在方法中控制方法的参数. 语法如下: 泛型类名 extend ...
- 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静态方法和实例化方法的区别(copy)
[资料来源] 方法是我们每天都在写得,很多程序员大多都使用实例化方法,而很少使用静态方法,问原因也说不出来所以然,或者简单的回答两者定义的区别,静态方法不需要new就可以使用 实例化方法需要new了以 ...
- java泛型方法作用_java泛型的作用与使用方法是什么?
泛型,即"参数化类型".一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参.那么参数化类型怎么理解呢?顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变 ...
- java 类型通配符_java中泛型之类型通配符(?)
实体类 package cn.xy.model; /** * 生物类 * @author xy * */ public class Living { private String name; publ ...
最新文章
- jenkins php build,使用 Jenkins 自动化发布 PHP 项目
- 序列化和反序列化--转
- K8S Deployment脚本部署Tomcat集群
- Linux 网络编程四(socket多线程升级版)
- 我的世界java无法安装包_手把手教你搭建java环境
- 趣挨踢 | 跳槽季,让我们一起攻克算法吧!
- 微软发布新品被指剽窃!交涉无果,两年开源项目被迫终结
- 利用display属性写的遮罩层
- 回炉重造-数据结构之数组列表
- 柯达新款Wi-Fi数码相机闪亮登场
- 苏宁易购第二次债券购回基本方案:购回资金总额20亿元
- 分类算法之邻近算法:KNN(应用篇)
- window自带放大镜解决高分辨率下的字体缩小问题
- 6.4 随机森林实战
- oracle的时间取的到底是谁的时间
- Html5 学习系列(三)增强型表单标签
- 拉钩网前端项目实战01
- 使用prettier统一编码风格
- 动画:面试官问我 JS「变量提升」我头皮发麻,最后把这篇动画甩给了他
- 汉王速录笔linux驱动下载,汉王速录笔v586s驱动
热门文章
- win7计算机浏览记录怎么删除,Win7旗舰版系统删除本地浏览记录的技巧
- 安装VS2010的过程遇到VC10.0 Runtime组件安装失败怎么解决
- 参加“全球敏捷运维峰会(北京站)”有感
- 2020年 ICLR 国际会议最终接受论文(poster-paper)列表(二)
- 综合评价理想解法(TOPSIS解法)
- (38)DWD层事实表创建
- thymeleaf笔记
- 挂一漏万——交通相关微信公共账号(V1)
- 2022,又一批AI大牛从大厂出走了
- Kotlin let with run apply also filter if常规用法笔记