2015-01-09 2 views
0

Являются ли двумерные перечисления в java? то есть:Двумерное перечисление

public enum Modules { 
    ATTACK(enum States{IDLE, NEAREST, NEARESTTOHQ;}), 
    MOVE(enum States{IDLE, NORTH, SOUTH, EAST, WEST;}), 
    SPAWN(enum States{IDLE, SIMPLESPAWN;}); 
} 
+0

Не в каком-то смысле я знаю. –

+0

Почему бы вам не попробовать? http://stackoverflow.com/questions/8732710/enum-within-an-enum –

ответ

0

у меня есть небольшие проблемы с пониманием того, что вы пытаетесь сделать, но, возможно, это сделать?

enum States { 
    IDLE, NEAREST, NEARESTTOHQ,NORTH,SOUTH,EAST,WEST,IDLESPAWN 
} 

public enum Modules { 
    ATTACK(IDLE, NEAREST, NEARESTTOHQ), 
    MOVE(IDLE, NORTH, SOUTH, EAST, WEST), 
    SPAWN(IDLE, SIMPLESPAWN); 

    private States[] states; 

    public Modules(States... states) { 
     this.states=states; 
    } 
} 

(Обратите внимание, что для получения синтаксиса я использовал я считаю, что вам нужно будет поставить государства в его собственный файл, и включают в себя импорт государств. * В модулях)

0

Одним словом, нет. В соответствии с the JLS:

Константа перечисления определяет экземпляр типа перечисления.

Из этого следует, что каждая константа перечисления, так как она относится к типу Enum, не может содержать новое объявление вложенного члена. Вы можете определить все три ваших «суб» перечисления как вложенные члены Enum, а затем получить доступ к ним как:

Modules.AttackOptions.IDLE 

По той же логике (и JLS позволяет) Enum константы могут также содержать переопределения абстрактный или метод по умолчанию, и имеют свое собственное «состояние», например, так:

public enum Modules { 
    ATTACK(0, 1, 2) { public int getCost() { return 2;} }, 
    MOVE (3, 4, 5) { }, // no method override 
    SPAWN (6, 7) { public int getCost() { return 1000;} }; 

    private final int[] vars; 
    private Modules(int... vars) { this.vars = vars; } 
    public int getCost() { return 1; } 
    public int[] getVars() { return this.vars; } 

    public enum AttackOptions { 
     IDLE, NEAREST, SPAWN 
    } 
} 
0

Не в том смысле, что вы думаете , но это можно сделать более прямолинейно.

Если эти перечисления способны удерживать массив States, вы можете установить их известные состояния во время объявления.

Пример:

public enum Modules { 
    ATTACK(States.IDLE, States.NEAREST, States.NEARESTTOHQ), 
    MOVE(States.IDLE, States.NORTH, States.SOUTH, States.EAST, States.WEST), 
    SPAWN(States.IDLE, States.SIMPLESPAWN); 

    private final States[] knownStates; 

    private Modules(States... knownStates) { 
     this.knownStates = knownStates; 
    } 

    public States[] getKnownStates() { 
     return knownStates.clone(); 
    } 
} 
Смежные вопросы