我有一个接口ParentInterface
并有多个实现它的枚举:ChildEnum1
和ChildEnum2
。我有一个方法,将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);
}
}