【问题标题】:Generic Enum/EnumSet Troubles通用枚举/枚举集问题
【发布时间】:2013-01-10 19:14:30
【问题描述】:

我有一个类和函数定义如下:

public class Site {
    public EnumSet<?> contents;

    public void determineStates(Site a, Site b) {
        this.contents.clear();
        this.contents.addAll(a.contents);
        this.contents.addAll(b.contents);
        a.contents.removeAll(b.contents);
        this.contents.removeAll(a.contents);
    }
}

对于这两个 addAll 操作,Eclipse 都会给我以下错误消息:

The method addAll(Collection<? extends capture#6-of ?>) in the type AbstractCollection<capture#6-of ?> is not applicable for the arguments (EnumSet<capture#7-of ?>)

基本上我需要某种形式的Enum 泛型,我只是对似乎存在的限制感到沮丧。我有许多不兼容的 Enum 类型,但我想要一些可以容纳任何类型的容器。

我知道在这段代码中无法确定abcontents 都是相同的Enum 类型,但是在实际实现中这应该不会有问题。

解决我的一般Enum 问题的任何想法和可能的方法都将很有价值,我将非常感谢您的帮助。提前致谢。

【问题讨论】:

  • 如果 a b 和 c 是相同的 Enum 类型,那么 Site 应该有自己的泛型参数。如果没有,这不能用 EnumSets 来完成。
  • @LouisWasserman 在实现中,是的,所有变量都将具有相同的 Enum 类型。您介意解释一下如何为站点创建通用参数吗?

标签: java generics enums enumset


【解决方案1】:

Site 类应该是通用的:

public class Site<E extends Enum<E>> {
    public EnumSet<E> contents;

    public void determineStates(Site<E> a, Site<E> b) {
        this.contents.clear();
        this.contents.addAll(a.contents);
        this.contents.addAll(b.contents);
        a.contents.removeAll(b.contents);
        this.contents.removeAll(a.contents);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-11
    • 1970-01-01
    • 2015-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多