Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 对由values()获得的枚举常量调用函数_Java_Enums_Interface_Casting_Iteration - Fatal编程技术网

Java 对由values()获得的枚举常量调用函数

Java 对由values()获得的枚举常量调用函数,java,enums,interface,casting,iteration,Java,Enums,Interface,Casting,Iteration,我试图通过迭代枚举的所有常量来概括一些代码,以从每个常量接收相同的特定参数 具体来说,我有一个enump,带有一些常数A、B、C 这些常量中的每一个本身都是一个枚举,并实现一个接口I,该接口定义了一个函数f P.values()给了我一个数组P[]A={A,B,C},但是我不能调用A[I].f(),因为A[I]当然是P类型,它没有实现I 现在我的理解是,函数可以返回接口,但我不能实例化它,因此不能强制转换到它。 我是否应该覆盖P的values()以返回I[]?如果是这样的话,既然我不能投给我,我

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

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

我在eclipse中工作,但假设它的抱怨表明存在真正的错误,而不仅仅是eclipse无法识别类型。

由于我对Java有点陌生,我也希望您能提供任何指向资源的链接,以解释类型匹配/检查的基本规则。

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

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();
    }
}

这似乎和你描述的一样——也许我误解了你的问题。如果是,请进一步解释

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();
    }
}

分享你的代码我想我遗漏了什么。您的
enum
是否实现了相关接口?如果是这样,您应该能够直接调用函数
f
。如果不是,可能
enum
应该实现
I
。每个enum常量应该实现相同的接口
I
<代码>枚举P实现I{A(fa),B(fb),C(fc);公共final F F;P(F F){this.F=F;}…}共享代码我想我遗漏了什么。您的
enum
是否实现了相关接口?如果是这样,您应该能够直接调用函数
f
。如果不是,可能
enum
应该实现
I
。每个enum常量应该实现相同的接口
I
<代码>枚举P实现I{A(fa),B(fb),C(fc);公共final F;P(F){this.F=F;}…}