java如何创建T类型的新对象
我正在尝试制作一个T型的新对象
我试过:
T h = new T();
T h = T.newInstance();
那些不起作用。我还尝试:
T h = (T)(new Object());
这是可行的,但是h.getClass().getName()
返回java.lang.Object
有没有办法在不知道类名的情况下创建该类的默认对象
编辑(来自评论):
T
是一个泛型。比如Class<T>
你可以在下面搜索框中键入要查询的问题!
我正在尝试制作一个T型的新对象
我试过:
T h = new T();
T h = T.newInstance();
那些不起作用。我还尝试:
T h = (T)(new Object());
这是可行的,但是h.getClass().getName()
返回java.lang.Object
有没有办法在不知道类名的情况下创建该类的默认对象
编辑(来自评论):
T
是一个泛型。比如Class<T>
# 1 楼答案
正如Jon所评论的,由于type erasure,您明确地需要这个类
例如,如果你有一个通用方法,你必须这样做:
如果是泛型类,它的工作原理基本相同。只需将类对象传递给metod,甚至传递给构造函数
# 2 楼答案
也可以使用原型模式
# 3 楼答案
只能创建已知类型的实例
T
不是Java附带的东西,但它通常在接受类型参数(Java泛型)的类中用作内部类型参数例如,假设您正在创建一个类型参数化的链表,也就是说,一个可以将任何一种数据类型用作内容的链表。如果您希望这个类的实例只能包含
String
,您可以这样实例化它:这样一个类的定义需要一个类型参数,该参数将表示实例化它时使用的任何类,看起来像这样:
在该类中,您可以创建T类型的实例,并且可以使用
T t = new T();
,就像您所期望的那样。然而,T在运行时将引用其他一些类,因为T只是一个类型参数但是,该
T
类型将无法在类外访问如果你没有实现一个类型参数化的类,你必须创建一个类型为T的类来实例化它,并确保将它包含在你想要使用它的任何范围内。但我不建议这样做,因为它不是很有描述性