从java中的父接口获取枚举大小

从java中的父接口获取枚举大小,java,inheritance,enums,Java,Inheritance,Enums,我有一个接口ParentInterface,并且有多个实现它的枚举:ChildEnum1和ChildEnum2。我有一个方法,我将ParentInterface作为参数传递给它 根据传递给此方法的ChildEnum,我想获得枚举的大小。我该怎么做?values.length() 我们如何实现这一点?通过反射,使用(快速和肮脏的演示): 在ParentInterface中定义size()方法如何?@fge:我的枚举有静态方法,但接口不能有静态size()方法。但您不是在类上调用方法,而是在传递给方

我有一个接口
ParentInterface
,并且有多个实现它的枚举:
ChildEnum1
ChildEnum2
。我有一个方法,我将
ParentInterface
作为参数传递给它

根据传递给此方法的
ChildEnum
,我想获得枚举的大小。我该怎么做?
values.length()

我们如何实现这一点?

通过反射,使用(快速和肮脏的演示):


ParentInterface
中定义
size()
方法如何?@fge:我的枚举有静态方法,但接口不能有静态
size()
方法。但您不是在类上调用方法,而是在传递给方法的实例上调用方法。您不需要将
size()
方法设为静态。这非常有用!另一方面,在建筑方面,使用反射是一个好的设计选择吗?我听说人们从未使用过反射哲学,因此我避免将其用于任何核心业务逻辑。你的想法是什么?关于品味,我认为,这更多的是“内省”而不是“反思”。当你使用反射来做你不应该直接做的事情时,我发现反射有问题(比如访问一个私有字段,…)
package com.stackoverflow.so21821751;

public class Test {
    interface ParentInterface {
        void someMethod();
    }

    static enum ChildEnum1 implements ParentInterface {
        FOO, BAR, LOL;

        @Override
        public void someMethod() {
            // something
        }
    }

    static enum ChildEnum2 implements ParentInterface {
        FOO, BAR;

        @Override
        public void someMethod() {
            // something
        }
    }

    public static void main(final String[] args) {
        foo(ChildEnum1.BAR); // 3
        foo(ChildEnum2.FOO); // 2
    }

    private static void foo(final ParentInterface i) {
        System.out.println(i.getClass().getEnumConstants().length);
    }
}