我有一个接口(interface)和一个枚举如下:
public interface SomeInterface {
......
}
public enum SomeEnum implements SomeInterface {
......
}
public class SomeClass {
public void someMethod(Set<SomeInterface> s) {
...
}
}
现在调用someMethod(Set<SomeInterface> s)
我创建了一个包含所有元素的枚举集,因此我执行以下操作:
Set<? extends SomeInterface> choosen = EnumSet.allOf(SomeEnum.class);
SomeClass obj = new SomeClass();
obj.someMethod(choosen)
我得到编译时错误:
错误:类 SomeClass 中的方法 someMethod 不能应用于给定的类型;
required: Set<SomeInterface>
found: Set<CAP#1>
原因:实参Set<CAP#1>
无法转换为 Set<SomeInterface>
通过方法调用转换
其中 CAP#1 是一个新的类型变量:
CAP#1 从捕获 ?扩展一些接口(interface)
IMP: 我知道这个错误可以通过 changing the method 解决至 someMethod(Set<? extends SomeInterface> s)
, 但我不能更改 someMethod
的签名
最佳答案
将您的 Set 转换为 Set<?>
然后到 Set<Whatever>
你要。这应该可以解决您的问题...
关于java - 从 Set<SomeEnum> 转换为 Set<? extends SomeInterface> 当 SomeEnum 实现 SomeInterface 时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22934418/