[英]Generic interface in java with WildCard
我混淆了Java泛型接口和类型通配符。 我试图实现一种通用的方法来将选项列表传递给一个方法,其中选项的类型在编译类型是未知的。
我用以下方式做了,但是在编译时遇到错误。
通用接口:
public interface IOption<T> {
public T getOption();
}
这个方法应该输入一个未知类型的选项列表,所以我用了一张外卡。
public interface IAction {
boolean do(Iterable<IOption<?>> options);
}
我创建了以下布尔选项列表:
IOption<Boolean> option = new IOption<Boolean>(){
@Override
public Boolean getOption() {
return new Boolean(doEnable);
}
};
Iterable<IProjectStateOption<Boolean>> options =
Collections.singletonList(option);
但是当调用方法do
时,我收到以下错误:
The method do( Iterable<IOption<?>>) in the type IAction is not applicable for
the arguments (Iterable<IOption<Boolean>>)
即使Option<Boolean>
可转换为Option<?>
Iterable<Option<Boolean>>
也无法转换为Iterable<Option<?>>
。
你想要Iterable<? extends Option<?>>
Iterable<? extends Option<?>>
。
您必须更改do方法或特定迭代器,因为Iterable<IProjectStateOption>
对Iterable<IOption>
无效。
public interface IAction {
boolean do(Iterable<? extends IOption> options);
}
如果要指定特定类型的IOption
则还需要在IAction
使用<T>
public interface IAction<T>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.