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

基于ChildEnum传递给此方法的内容,我想获取枚举的大小。我怎样才能做到这一点? values.length()方法仅适用于enums,但是我们仅将ParentInterface传递给调用方。

我们怎样才能做到这一点?

最佳答案

通过反射,使用Class#getEnumConstants()(快速而肮脏的演示):

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

09-11 19:13