java 枚举嵌套枚举_Java中的嵌套枚举?
在OP的一些评论之后,我更新了我的代码.使用语法变得丑陋,在切换块中可能无法正常工作,但我相信这可以实现OP的目标:
import java.util.*;
public class HelloWorld
{
public static void main(String []args)
{
// Different services are not equal
System.out.println(Service.REGISTER + "==" + Service.LOGIN + " :: " + Service.REGISTER.equals(Service.LOGIN));
// Same service is equal
System.out.println(Service.REGISTER + "==" + Service.REGISTER + " :: " + Service.REGISTER.equals(Service.REGISTER));
// Even after changing the state
Service tmp = Service.REGISTER;
Service.REGISTER.setState(Service.ServiceState.State.Failed);
System.out.println(Service.REGISTER + "==" + tmp + " :: " + Service.REGISTER.equals(tmp));
Service.REGISTER.setState(Service.ServiceState.State.LOADED);
// Different service,same state is not equal
System.out.println(Service.REGISTER + "." + Service.REGISTER.state + "==" + Service.LOGIN + "." + Service.LOGIN.state + " :: " + Service.REGISTER.state.equals(Service.LOGIN.state));
// Same service,same state is equal (even when changing state around)
Service.ServiceState.State temp = Service.REGISTER.getState();
Service.REGISTER.setState(Service.ServiceState.State.LOADED);
System.out.println(Service.REGISTER + "." + Service.REGISTER.state + "==" + tmp + "." + temp + " :: " + temp.equals(Service.REGISTER.getState()));
// Same service,different state is not equal
Service.REGISTER.setState(Service.ServiceState.State.Failed);
System.out.println(Service.REGISTER + "." + Service.REGISTER.state + "==" + tmp + "." + temp + " :: " + temp.equals(Service.REGISTER.getState()));
// Both service and state can be used as map keys
Map map = new HashMap();
Map map2 = new HashMap();
}
}
enum Service
{
REGISTER(),LOGIN(),NEWS(),FAQ();
public ServiceState state;
Service()
{
this.state = new ServiceState();
}
public void setState(ServiceState.State s)
{
state.state = s;
}
public ServiceState.State getState() { return state.state; }
public static class ServiceState
{
public enum State
{
LOADED,Failed
}
public State state = State.LOADED;
public ServiceState(){}
public String toString() { return state.toString(); }
public int hashCode()
{
return state.hashCode();
}
public boolean equals(Object obj)
{
return state.equals(obj);
}
}
}
REGISTER==LOGIN :: false
REGISTER==REGISTER :: true
REGISTER==REGISTER :: true
REGISTER.LOADED==LOGIN.LOADED :: false
REGISTER.LOADED==REGISTER.LOADED :: true
REGISTER.Failed==REGISTER.LOADED :: false
原答案:
使用您想要的语法不太可能,但Java枚举基本上只是另一个名称的类. (事实上,一旦编译,它们就是扩展java.lang.Enum< E extends Enum< E>>)的类.
public class HelloWorld
{
public static void main(String []args)
{
Service a = Service.REGISTER;
a.state = Service.ServiceState.LOADED;
System.out.println(a);
}
}
enum Service
{
REGISTER(),FAQ();
public ServiceState state;
Service()
{
this.state = ServiceState.LOADED;
}
public String toString()
{
return super.toString() + "." + state.toString();
}
public enum ServiceState
{
LOADED,Failed
}
}
REGISTER.LOADED
