Создание статического подкласса родителя-родителя из другого класса в Java - PullRequest
0 голосов
/ 08 июля 2019

У меня есть универсальный класс, который выглядит следующим образом:

public abstract class Foo<T extends Foo<T>> {...

и другой класс, который выглядит следующим образом:

public abstract class Fum<T extends Fum<T,U>, U extends Foo<U>> {...

и, наконец, некоторые подклассы, которые выглядят следующим образом:

public class SubFoo extends Foo<SubFoo> {...

public class SubFum extends Fum<SubFum,SubFoo> {...

В абстрактных классах есть абстрактные методы, объявленные public abstract T create(); (с перегруженными версиями), которые отвечают за создание экземпляров объектов подкласса, используемых в методах суперкласса.

Однако, очевидно, я не могу просто написать new U() в Fum, чтобы получить экземпляр SubFoo, поэтому я хочу какой-нибудь статический метод-заполнитель, который я могу переопределить.Однако я, очевидно, не могу написать public static abstract T create(); по тем причинам, которые я не могу понять.

Поэтому в Fum я написал метод, который выглядит следующим образом:

@SuppressWarnings("unchecked")
protected static <V extends Foo<V>> V newSubFoo() {
    try {//create() requires a constructed object to work.
        return (V) Foo.class.asSubclass(Foo.class).newInstance().create();
    } catch (InstantiationException | IllegalAccessException e) {
        e.printStackTrace();
        System.exit(1);
        return null;
    }//I don't expect this to work, but I don't know what to use before 
}   // the "asSubclass" call.

, который заставляет компилятор отключаться.Тем не менее, это, похоже, ни к чему меня не приведет.

В заключение: есть ли способ создать новый объект типа U в Fum, используя статический метод, который может быть переопределен в SubFoo (желательно без записи пустого конструктора в Foo)?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...