有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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>


共 (3) 个答案

  1. # 1 楼答案

    正如Jon所评论的,由于type erasure,您明确地需要这个类

    例如,如果你有一个通用方法,你必须这样做:

    public void <T> myMethod(Class<T> clazz) {
        T foo = clazz.newInstance();
    }
    

    如果是泛型类,它的工作原理基本相同。只需将类对象传递给metod,甚至传递给构造函数

  2. # 2 楼答案

    也可以使用原型模式

    public E makeNew(E template) throws IllegalAccessException,InstantiationException{
        E newobject=(E)template.getClass().newInstance();
        return newobject;
    }
    
  3. # 3 楼答案

    只能创建已知类型的实例T不是Java附带的东西,但它通常在接受类型参数(Java泛型)的类中用作内部类型参数

    例如,假设您正在创建一个类型参数化的链表,也就是说,一个可以将任何一种数据类型用作内容的链表。如果您希望这个类的实例只能包含String,您可以这样实例化它:

    MyLinkedList<String> list = new MyLinkedList<String>();
    

    这样一个类的定义需要一个类型参数,该参数将表示实例化它时使用的任何类,看起来像这样:

    class MyLinkedList<T> {
        // implementation code
    } 
    

    在该类中,您可以创建T类型的实例,并且可以使用T t = new T();,就像您所期望的那样。然而,T在运行时将引用其他一些类,因为T只是一个类型参数

    但是,该T类型将无法在类外访问

    如果你没有实现一个类型参数化的类,你必须创建一个类型为T的类来实例化它,并确保将它包含在你想要使用它的任何范围内。但我不建议这样做,因为它不是很有描述性