假设我有一个通用类,声明如下:
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
的构造函数限制?