Предположим, у меня есть универсальный класс, который я использую, который объявлен как это:Java общий объект с несколькими интерфейсами литья
public class ConfigurableRuleKey<R extends Configurable & Rule> extends Key<R> {
private final R rule
public ConfigurableRuleKey(R rule) {
this.rule = rule;
}
/* Additional methods are declared here */
}
И я хочу, чтобы реализовать фабричный метод, который проверяет, если он принят правило реализует интерфейс Configurable
при создании конфигурируемый правило или просто создать основной ключ:
public static <R extends Rule> Key<R> create(R rule) {
if (rule instanceof Configurable) {
return new ConfigurableRuleKey<>(rule); //This will not compile
} else {
return new RuleKey<>(rule);
}
}
проблема заключается в том, что в моем методе фабрики я не могу передать правило конструктор ConfigurableRuleKey
, поскольку он не соответствует заявленным общие ограничения (событие, если бы я ехр законно проверил, что он реализует Configurable
). Вопрос в том, как я могу нарисовать свой экземпляр правила, чтобы он соответствовал ограничениям конструктора в ConfigurableRuleKey
?
Моя IDE говорит мне, что этот код даже не компилируется, но на самом деле кажется, что он это делает. :) Благодаря. Я думаю, что я расскажу об этой проблеме для поддержки моей IDE. – SimY4
@ SimY4: Просто из любопытства, о чем жалуется IDE? – Dolda2000
Я использую IntelliJ Idea 14 Early Access Preview – SimY4