Advertisement

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

全部评论 (0)

还没有任何评论哟~