Flask接口签名sign原理与实例代码浅析
283
2022-12-01
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
}
}
执行结果
控制台输出
完整代码
package com.learn.genericinstance;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
public clNSaaUoass GenericInstanceLearn {
public static void main(String[] args) throws InstantiationException, IllegalAccessException {
UserDao userDao = new UserDao();
System.out.println(userDao.toString());
}
}
class Dao
public Class
public T user;
public Dao() throws IllegalAccessException, INSaaUonstantiationException {
Type superclass = getClass().getGenericSuperclass();
ParameterizedType parameterizedType = null;
if (superclass instanceof ParameterizedType) {
parameterizedType = (ParameterizedType) superclass;
Type[] typeArray = phttp://arameterizedType.getActualTypeArguments();
if (typeArray != null && typeArray.length > 0) {
clazz = (Class
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泛型实例化的资料请关注我们其它相关文章!
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~