我想知道在Java中是否可以嵌套Enum。
在这里,我想要做的是:
拥有一种由猫和狗组成的种可以让我接触到现有的猫和狗品种。举个例子,我想测试一下是猫还是狗,动物是猫还是皮特布尔狗。猫和狗的品种必须是不同的根据地,即CatBreeds枚举和DogBreeds enum。
下面是我想使用的访问模式的一个示例:
种类:
品种:
发布于 2010-04-14 11:21:25
你用遗产做这件事不是更好吗?猫和狗将是物种的亚纲。Persion是猫的子类,Pitbull是狗的子类。
通过使用Enum,我们想要实现什么?
发布于 2012-01-22 09:54:44
一种筑巢方式:
package nested2;
import java.util.*;
interface HasChildren {
Set<Enum<? extends HasChildren>> children();
Class parent();
Enum<? extends HasChildren> p();
}
enum Citrus implements HasChildren {
lemon, lime, orange;
Enum<? extends HasChildren> p;
Class parent = getDeclaringClass();
Class children;
public Enum<? extends HasChildren> p() {
return p;
}
public Class parent() {
return parent;
}
public Set<Enum<? extends HasChildren>> children() {
return children != null ? EnumSet.allOf(children) : null;
}
enum Orange implements HasChildren {
navel, valencia, blood;
Enum p;
Class parent = getDeclaringClass();
Class children;
public Enum<? extends HasChildren> p() {
return p;
}
public Class<Enum<? extends HasChildren>> parent() {
return parent;
}
public Set<Enum<? extends HasChildren>> children() {
return children != null ? EnumSet.allOf(children) : null;
}
enum Navel implements HasChildren {
washinton, lateLane, caraCaraPink;
Enum<? extends HasChildren> p;
Class parent = getDeclaringClass();
Class children;
public Enum<? extends HasChildren> p() {
return p;
}
public Class parent() {
return parent;
}
public Set<Enum<? extends HasChildren>> children() {
return null;
}
}
static {
navel.children = Navel.class;
for (Navel n : Navel.values())
n.p = orange;
navel.p = navel;
}
enum Blood implements HasChildren {
moro, taroco;
Enum<? extends HasChildren> p;
Class parent = getDeclaringClass();
Class children;
public Enum<? extends HasChildren> p() {
return p;
}
public Class parent() {
return parent;
}
public Set<Enum<? extends HasChildren>> children() {
return null;
}
}
static {
blood.children = Blood.class;
for (Blood b : Blood.values())
b.p = blood;
blood.p = orange;
}
}
static {
for (Orange o : Orange.values())
o.p = orange;
orange.children = Orange.class;
}
}
public class EnumTree {
static void visit(Class<?> clazz) {
Object[] enumConstants = clazz.getEnumConstants();
if (enumConstants[0] instanceof HasChildren) for (Object o : enumConstants)
visit((HasChildren) o, clazz.getName());
}
static void visit(HasChildren hasChildren, String prefix) {
if (hasChildren instanceof Enum) {
System.out.println(prefix + ' ' + hasChildren + " (" + hasChildren.parent() + ")" + " (" + hasChildren.p()
+ " " + ((Enum) hasChildren).getDeclaringClass());
if (hasChildren.children() != null) for (Object o : hasChildren.children())
visit((HasChildren) o, prefix + ' ' + hasChildren);
} else
System.out.println("other " + hasChildren.getClass());
}
static <E extends Enum<E> & HasChildren> Set<E> foo() {
return null;
}
public static void main(String[] args) {
//looks like p is the right parent
System.out.println(Citrus.Orange.Navel.washinton);
System.out.println(Citrus.Orange.Navel.washinton.getClass().getDeclaredClasses());
System.out.println(Citrus.Orange.Navel.washinton.getClass().getEnclosingClass());
System.out.println(Citrus.Orange.Navel.washinton.getClass().getDeclaringClass());
visit(Citrus.lemon, "");
System.out.println("----------------------");
visit(Citrus.orange, "");
System.out.println("----------------------");
visit(Citrus.class);
System.out.println("----------------------");
}
}发布于 2010-04-14 11:25:21
public enum A {
a1,
a2;
public enum B {
b1,
b2
}
}等等..。
https://stackoverflow.com/questions/2636845
复制相似问题