2013-10-14 3 views
0

Я пытаюсь сохранить значение цвета в Java массиве, но я знаю, что эти значения хранятся в виде строк,Как получить доступ к элементам массива, как константы - Java

String[] colorarray = {"Color.yellow","Color.red","Color.blue"}; 

Теперь, я не мог получить доступ к этому массиву элемент для установки цвета, то есть

g.setColor(colorarray[0]); 

Поскольку все значения в массиве являются строками. Как я мог преобразовать эти значения в константы?

+0

Может быть, 'enum' будет лучше подходит? –

ответ

2

Если у вас есть контроль над массивом, всеми средствами изменить его, чтобы быть просто массив Color с как это было предложено несколько других люди.

Color[] colorArray = {Color.YELLOW, Color.RED, Color.BLUE}; 

Если вы не имеете контроля над массивом, и вы должны использовать его как есть, вам нужно сделать одну из двух вещей:

  1. Использование отражения для доступа к статическим члены класса Color (быстрый поиск в Google даст вам множество примеров того, как это сделать, поэтому я не буду вдаваться в него здесь)
  2. Создайте оператор switch 7 Java для строк для интерпретации каждого возможного значения цвета в массиве в Color.XXX, где XXX - это имя вашего цвет. (Это также можно сделать, используя большой блок if-else, но это будет не так чисто)

Еще одна оперативная заметка - имена переменных на Java, по соглашению, в camelCase, начиная с нижнего регистра письмо. Это поможет сделать ваш код более читаемым. (Названия классов - CamelCase, имена пакетов ниже.case)

+0

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

+0

Коррекция: было бы лучше предположить, что накладные расходы на использование рефлексии не являются препятствием для вашего приложения. Это то, что вы можете весить – StormeHawke

11

Использование

Color[] colorArray = {Color.YELLOW, Color.RED, Color.BLUE}; 
+1

Downvoters любезно объясняют – Reimeus

+1

Я не спускал вниз (и не буду), но вы предполагаете, что он имеет контроль над массивом – StormeHawke

+0

Отражение - это то, что я хотел бы попробовать и избегать, особенно учитывая его стоимость/сложность по сравнению с простой поиск массива – Reimeus

7

Непосредственная, используйте:

Color[] colorarray = {Color.YELLOW, Color.RED, Color.BLUE}; 
Смежные вопросы