Java: создать объект, тип которого является параметром типа

Я хочу написать эквивалентный код 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 заключается в том, что я не могу создать экземпляр объекта производного класса из суперкласса. Я получаю " Невозможно создать экземпляр ошибки типа T " для вызова " new T () ". Есть ли какой-либо аналогичный способ C # в Java или мне следует использовать что-то вроде шаблона прототипа и клонирования?

7
задан Heinzi 6 July 2011 в 13:07
поделиться