java - 从 Set<SomeEnum> 转换为 Set<? extends SomeInterface> 当 SomeEnum 实现 SomeInterface 时

标签 java generics enums

我有一个接口(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/

相关文章:

java - 如何创建填充并返回现有或新集合的通用方法?

java - 即使我添加自定义的反序列化器,Jackson 也无法将枚举反序列化为对象

c++ - 在关于数据库和 GUI 的模型代码中使用枚举时减少代码重复

java - 在java中迭代和修改集合时创建临时缓冲区的优点

java - 母语对特定操作系统意味着什么?

java - InterceptSendToEndpoint不拦截Route中的http请求,使用Camel和Springboot

java - angular js 优于 jsp view

单线程环境中单个事件源的 Java Swing 多个事件监听器

c# - 默认非空泛型值

Java 泛型 : put() on Map<String, 捕获#3-of ? extends AbstractClass> 不适用于参数 (String, AbstractClass)