Java Generics Copy构造函数

时间:2013-10-07 02:09:50

标签: java generics copy-constructor

我想为一般定义的类编写复制构造函数。我有一个内部类Node,我将其用作二叉树的节点。当我传入一个新的对象

public class treeDB <T extends Object> {
    //methods and such

    public T patient; 
    patient = new T(patient2);       //this line throwing an error
    //where patient2 is of type <T>
}

我只是不知道如何一般地定义一个拷贝构造函数。

1 个答案:

答案 0 :(得分:8)

T无法保证它所代表的类具有必需的构造函数,因此您无法使用new T(..)形式。

我不确定这是否是您需要的,但如果您确定要复制的对象类将具有复制构造函数,那么您可以使用像

这样的反射
public class Test<T> {

    public T createCopy(T item) throws Exception {// here should be
        // thrown more detailed exceptions but I decided to reduce them for
        // readability

        Class<?> clazz = item.getClass();
        Constructor<?> copyConstructor = clazz.getConstructor(clazz);

        @SuppressWarnings("unchecked")
        T copy = (T) copyConstructor.newInstance(item);

        return copy;
    }
}
//demo for MyClass that will have copy constructor: 
//         public MyClass(MyClass original)
public static void main(String[] args) throws Exception {
    MyClass mc = new MyClass("someString", 42);

    Test<MyClass> test = new Test<>();
    MyClass copy = test.createCopy(mc);

    System.out.println(copy.getSomeString());
    System.out.println(copy.getSomeNumber());
}