конструктор класса typehint с интерфейсом

Решение изменит вашу сигнатуру вашего интерфейса:

double apply(Optional<? extends A> a);

Анализ

Рассмотрим, если ваш интерфейс просто:

double apply(A a);

Тогда никогда ошибка не будет [. g3]

Это потому, что Double назначается Object. Компилятор автоматически адаптирует тип. Это означает, что на самом деле интерфейс:

double apply(? extends A a);

Итак, что вам нужно, это позволить вашему интерфейсу использовать эту способность адаптации.

func(Number) может принимать параметр Double в качестве параметра.

func(Optional<Number>) также должен принять Optional<Double>.

Итак, вы должны добавить ? extends на свою интуицию.

0
задан Chris 18 January 2019 в 21:27
поделиться

1 ответ

Вы можете использовать сигнатуру конструктора:

class DownloadWorker {
    constructor(downloader: new () => IDownloader) {
    }
}

Сигнатура похожа на сигнатуру функции, но new делает ее вызываемой с помощью оператора new для создания нового объекта.

Приведенный выше код принимает конструктор (то есть класс) без параметров. Вы можете добавить определенные параметры или определить его как new (...a:any[]) => IDownloader, чтобы позволить конструктору с любыми аргументами.

0
ответ дан Titian Cernicova-Dragomir 18 January 2019 в 21:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: