Я хочу написать эквивалентный код Java для кода C #.
Мой код C # выглядит следующим образом:
public abstract class A<T> where T : A<T>, new()
{
public static void Process()
{
Process(new T());
}
public static void Process(T t)
{
// Do Something...
}
}
public class B : A<B>
{
}
public class C : A<C>
{
}
Java-код моего кода выглядит следующим образом.
public abstract class A<T extends A<T>>
{
public static <T extends A<T>> void process()
{
process(new T()); // Error: Cannot instantiate the type T
}
public static <T extends A<T>> void process(T t)
{
// Do Something...
}
public class B extends A<B>
{
}
public class C extends A<C>
{
}
}
Здесь синтаксис "new ()" в объявлении класса заставляет производные классы написать конструктор по умолчанию, который позволяет вызывать "new T ()" из базового класса. Другими словами, когда я пишу базовый класс, я уверен, что у производного класса будет конструктор по умолчанию, так что я могу создать экземпляр объекта производного класса из базового класса.
Моя проблема в Java - я не могу создать экземпляр объекта производного класса из суперкласса. Я получаю "Cannot instantiate the type T"
ошибку для "new T()"
звонка. Есть ли в Java аналогичный C # способ или я должен использовать что-то вроде шаблона прототипа и клонирования?