【问题标题】:Calling a function on an enum constant obtained by values()在 values() 获得的枚举常量上调用函数
【发布时间】:2017-09-21 13:05:09
【问题描述】:

我试图通过迭代枚举的所有常量来概括一些代码,以从每个常量接收相同的特定参数。

具体来说,我有一个枚举 P 和一些常量 A,B,C
这些常量中的每一个本身都是一个枚举,并实现了一个接口 I,该接口定义了一个函数 f
P.values() 给了我一个数组 P[] A = {A,B,C},但是我不能调用 A[i].f(),因为 A[i ] 当然是 P 类型,它不实现 I
现在在我的理解中,一个函数可以返回一个接口,但我不能实例化它,因此不能转换为它。
我应该为 P 覆盖 values() 以返回 I[] 吗?如果是这样,由于我无法投射到 I,我该怎么做?还是有其他解决方案?

我在 eclipse 中工作,但假设它的抱怨表明了一个真正的错误,而不仅仅是 eclipse 不识别类型。
由于我对 Java 有点陌生,因此我也很感谢任何解释类型匹配/检查的基本规则的资源链接。

【问题讨论】:

  • 分享你的代码
  • 我想我错过了一些东西。你的enum 是否实现了相关接口?如果是这样,您应该可以直接调用函数f。如果没有,也许enum 应该实现I
  • 每个枚举常量都应该实现相同的接口Ienum P implements I { A(fa), B(fb), C(fc); public final F f; P(F f) { this.f = f; } ...}

标签: java enums interface casting iteration


【解决方案1】:

这似乎与您所描述的一样 - 也许我误解了您的问题。如果有,请进一步解释。

interface I {
    void f ();
}

enum P implements I{
    A,
    B,
    C {
        // Demonstrate enum-specific implementation.
        @Override
        public void f () {
            System.out.println("SEEEEEE!");
        }
    };

    // By default `f` prints the name of the enum.
    @Override
    public void f () {
        System.out.println(name());
    }
}

public void test() throws Exception {
    for ( I i : P.values()) {
        i.f();
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-12
    • 2015-08-21
    • 2011-07-09
    相关资源
    最近更新 更多