Развернуть угловой 6 универсальный на базе огня

Как объяснялось в других ответах, чтобы использовать этот подход ParameterizedType, вам нужно расширить класс, но это похоже на дополнительную работу, чтобы сделать весь новый класс, который расширяет его ...

So , что делает класс абстрактным, он заставляет вас расширять его, тем самым удовлетворяя требование подкласса. (используя lombok's @Getter).

@Getter
public abstract class ConfigurationDefinition<T> {

    private Class<T> type;
    ...

    public ConfigurationDefinition(...) {
        this.type = (Class<T>) ((ParameterizedType) this.getClass().getGenericSuperclass()).getActualTypeArguments()[0];
        ...
    }
}

Теперь, чтобы расширить его, не определяя новый класс. (Обратите внимание, что {} на конце ... расширен, но ничего не перезаписывайте - если вы не хотите).

private ConfigurationDefinition<String> myConfigA = new ConfigurationDefinition<String>(...){};
private ConfigurationDefinition<File> myConfigB = new ConfigurationDefinition<File>(...){};
...
Class stringType = myConfigA.getType();
Class fileType = myConfigB.getType();
0
задан Joaquim Antonio Kapel 14 July 2018 в 01:19
поделиться