java 泛型对象能实例化吗T t=new T()
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 泛型对象能实例化吗T t=new T()相关的知识,希望对你有一定的参考价值。
java中没法得到泛型参数化类型,因为在编译期没法确定泛型参数化类型,也就找不到对应的类字节码文件,自然就不行了泛型反射的关键是获取ParameterizedType,再调用它的getActualTypeArguments()方法获得实际绑定的类型。但注意public class BookManager<Book>是不能被反射的,因为擦拭法的缘故。只有在Superclass 或者成员变量(Field.getGenericType())等有函数返回ParameterizedType的时候才能成功反射,
你要么搞个构造函数把参数类型传进去才行 参考技术A JAVA里面API里面出现的T范型,是说你运行时候的类型,而不是T。
举个例子,譬如List.toArray
<T> T[] toArray(T[] a)
当你运行的时候写成list.toArray(new String[0])-->此时的T就是String类型,
当你写成list.toArray(new Integer[0]))--->此时的T就是Integer类型。
范型T并不特指某一特定类型,所以不能用T t = new T() 参考技术B 泛型使不能通过new的方式来实例化的 参考技术C 可以考虑下这样
T o=(T)(new Object());
C# 泛型类 构造方法中实例化T
在c#中:
public class AA<T> where T :class
public T[] t;
public AA ()
t = new T[10]; // 可以直接实例化。
public class AA<T> where T :class
public T t;
public AA ()
t = new T(); // 出错,提示: 变量类型“T”没有 new() 约束,因此无法创建该类型的实例
public class AA<T> where T :new ()
public T t;
public AA ()
t = new T(); // 成功
问题:为什么,t=new T(),需要约束。而 t = new T[10]; 不需要约束?请详细解答, 谢谢!
你好
t = new T[10]; 这句代码是【创建】一个T类型的长度为10的【数组】。
数组中的值为全部为null。就是说创建了数组,没有创建T类型的对象。
t = new T();这句代码是【创建】一个T类型的【对象】。
但是T类型中可能没有无参的构造器。如:
public class Personpublic Person(string name)
Name = name;
public string Name get; set;
使用约束
public class AA<T> where T :new ()就是保证T类型必须有一个无参构造器。保证对象一定能被构造。
参考技术A 泛型类:public class MyClass<T>
public T MyElement get; set;
泛型函数:
public T ReturnElement<T>()
throw new NotImplementedException();
但是当需要对MyElement进行实例化的时候,却不能使用new(),只要添加如下代码即可进行实例化了:
泛型类:
public class MyClass<T> where T: new()
public T MyElement get; set;
public MyClass()
this.MyElement = new T();
泛型函数:
public T ReturnElement<T>() where T : new()
return new T();
在这里,where实际上对泛型类型T的一个限定或补充。如果你希望T是一个int的集合,这个集合可以是List<int>,也可以是HashSet<int>等等,只要它们都是从ICollection继承而来的,则可以添加对类型T的限定,同时要保证它还是可以实例化的:
public T ReturnElement<T>()
where T : ICollection<int>, new()
return new T();
进一步,如果希望放宽集合中元素的类型,比如只要是int,double等可比较的类型,它们都是从IComparable继承而来,则可以继续添加如下限定:
public T ReturnElement<T, S>()
where T : ICollection<S>, new()
where S : IComparable
return new T();
参考技术B 不同的T构造的方式是不同的,有点需要1000字节的内存,有的需要8字节内存。而数组不同,它只是个容器,占用内存统一是一个引用,等你给数组这个容器里添加实际内容的时候,同样需要约束,比如t = new T[10]; t[0]=new T();后一句才是真正的new了一个T,前一句只是声明容器。 参考技术C new T[10]只是声明,还没赋值,只是10个空指针,你知道不管是什么对象的指针都基本是个整数,所以和类型无关。而new是实实在在地开辟了T类型的空间。 参考技术D public T[ ] t 是数组,不需要new本回答被提问者采纳
以上是关于java 泛型对象能实例化吗T t=new T()的主要内容,如果未能解决你的问题,请参考以下文章