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());
}