繁体   English   中英

带有WildCard的java中的通用接口

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM