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