2015-05-30 4 views
0

Я пытаюсь найти лучший способ, чтобы написать следующий код:Цитирование через enums?

public static void initTab(Player player) { 
    player.getPacketSender().sendString(15002, "Achievements - " + amountCompleted(player, Difficulty.TOTAL) + "/30"); 
    player.getPacketSender().sendString(15007, "Easy Tasks - " + amountCompleted(player, Difficulty.EASY) + "/10"); 
    player.getPacketSender().sendString(15008, getColor(player, 0, 0)+Achievements.Tasks.TASK1.getName()); 
    player.getPacketSender().sendString(15009, getColor(player, 1, 0)+Achievements.Tasks.TASK2.getName()); 
    player.getPacketSender().sendString(15010, getColor(player, 2, 0)+Achievements.Tasks.TASK3.getName()); 
    player.getPacketSender().sendString(15011, getColor(player, 3, 0)+Achievements.Tasks.TASK4.getName()); 
    player.getPacketSender().sendString(15012, getColor(player, 4, 0)+Achievements.Tasks.TASK5.getName()); 
    player.getPacketSender().sendString(15013, getColor(player, 5, 0)+Achievements.Tasks.TASK6.getName()); 
    player.getPacketSender().sendString(15014, getColor(player, 6, 0)+Achievements.Tasks.TASK7.getName()); 
    player.getPacketSender().sendString(15015, getColor(player, 7, 0)+Achievements.Tasks.TASK8.getName()); 
    player.getPacketSender().sendString(15016, getColor(player, 8, 0)+Achievements.Tasks.TASK9.getName()); 
    player.getPacketSender().sendString(15017, getColor(player, 9, 0)+Achievements.Tasks.TASK10.getName()); 
} 

Я думал об использовании для цикла в цикл через идентификаторы (15008, 15009, и так далее ...), но я не знаю, как я буду циклически перебирать значения перечисления таким же образом.

Я говорю об этом: Achievements.Tasks.TASK1.getName()

Я перечисление называемых задач и здесь является примером некоторых ценностей, которые в нем:

TASK1(Difficulty.EASY, TaskType.GLOBAL, "Easy Test1", "Test Description.", 1, new int[]{8147, 8148}), 
    TASK2(Difficulty.EASY, TaskType.GLOBAL, "Easy Test2", "Test Description.", 1, new int[]{8150, 8151}), 
    TASK3(Difficulty.EASY, TaskType.GLOBAL, "Easy Test3", "Test Description.", 1, new int[]{8153, 8154}), 
    TASK4(Difficulty.EASY, TaskType.GLOBAL, "Easy Test4", "Test Description.", 1, new int[]{8156, 8157}), 
    TASK5(Difficulty.EASY, TaskType.GLOBAL, "Easy Test5", "Test Description.", 1, new int[]{8159, 8160}), 

GetName() получает первую строку в значения: «Easy Test1»

Что я хотел бы знать: простой способ перебрать значения enum, чтобы я мог использовать метод getName() для всех значений только в нескольких строках кода.

Резюме

мне нужно перебрать это заявление:

player.getPacketSender().sendString(15008, getColor(player, 0, 0)+Achievements.Tasks.TASK1.getName());

Что мне нужно знать, как сделать это цикл через это:

Achievements.Tasks.TASK#.getName()

Этот вопрос не дублируется, потому что я прошу цикл через две разные вещи. Мне нужно одновременно перебирать enum и int (15008, 15009 и т. Д.). Не только перечисление, но не только int. Могу ли я вставить цикл for для перечислений внутри цикла for для ints?

+0

Это, по-видимому, распространенный прецедент, и класс enum, вероятно, имеет метод для возврата всех перечислений :) – ZhongYu

+0

Я бы просто получил все значения перечисления с помощью метода #values ​​() и затем перебирал этот массив. Получите доступ к текущему элементу с индексом цикла (например, «i»), а также используйте его для другого номера, добавив sth. Это не изящно, но это работает. –

ответ

3

См Oracle Documentation: All the constants of an enum type can be obtained by calling the implicit public static T[] values() method of that type. Если это то, что вы хотите, вы можете сделать что-то вроде этого:

class EnumLoop { 
    enum Color {RED, BLUE, GREEN}; 
    public static void main(String[] args) { 
    for (Color c : Color.values()) { 
     System.out.println(c.name()); 
    } 
    } 
} 

Вот Demo.

+0

Я думаю, что вы, возможно, неправильно поняли. Мне нужно повторить эту строку: 'player.getPacketSender(). SendString (15017, getColor (player, 9, 0) + Achievements.Tasks.TASK10.getName());' Я спрашиваю, как цикл через значения перечисления, как: 'Достижения.Tasks.TASK # .getName())' – Chawbee

+0

Вы говорите, что ваш enum имеет метод getName()? Как [это] (http://ideone.com/fwLWDq)? –

+0

Метод get name не имеет значения. Мне просто нужно знать, как цитировать имя значения, такого как TASK1, TASK2, TASK3. Вместо вызова getName снова и снова – Chawbee

Смежные вопросы