Вопрос о типе возвращаемого значения (необходимо возвращать экземпляры разных классов) в дженериках - PullRequest
2 голосов
/ 29 мая 2020

Итак, мой текущий код выглядит так. Идея состоит в том, чтобы взять экземпляры разных классов с использованием generi c типа T и вернуть эти экземпляры.

Я должен иметь возможность вызывать экземпляры таких классов

new A().add(new B())
    public static <T> T <T> add(T t) {
        return new T();
    }

По сути, для меня возвращаемый тип должен быть самим классом, чтобы он мог принимать новый экземпляр через возвращаемый тип.

Может ли кто-нибудь указать мне, где мой logi c работает неправильно?

1 Ответ

1 голос
/ 05 июня 2020

Вы не можете вызвать конструктор только из общего типа c, потому что 1. стирание типа означает, что T превращается в Object (или любую другую его верхнюю границу) во время выполнения, и 2. вы этого не делаете. Я знаю, что конструктор обязательно принимает 0 аргументов.

Лучший способ сделать это - использовать Supplier

public static <T> T add(Supplier<T> supplier) {
    return supplier.get();
}

, и вы можете использовать этот метод как это. Со ссылками на методы это довольно лаконично.

B b = YourClass.add(B::new);
...