У вас есть значение int
.И вы хотите получить Color
для этого значения int
.
Вы могли бы использовать для этого if
-ставления:
if (value == 0) color = Color.RED;
if (value == 1) color = Color.GREEN;
if (value == 2) color = Color.BLUE;
Вы могли бы использовать для этого оператор switch
:
switch (value) {
case 0: color = Color.RED; break;
case 1: color = Color.GREEN; break;
case 2: color = Color.BLUE; break;
}
Вы могли бы использовать для этого троичный оператор:
color = (value==0?Color.RED:(value==1?Color.GREEN:value==3?Color.BLUE)));
(не делайте этого ...)
Вы могли бы использовать для этого Map
:
Map<Integer, Color> colorMap = mapWith(
0, Color.RED,
1, Color.GREEN,
2, Color.BLUE);
...
Color color = colorMap.get(value):
Но сделайте шаг назад и посмотрите на то, что вы пытаетесь достичь: Выхотите где-нибудь добавить значение int
и получить Color
.Итак, напишите функцию
private static Color colorFor(int value) {
...
}
Затем, где вам нужен цвет, просто напишите
Color color = colorFor(value);
Реализуете ли вы функцию colorFor
, используя if
, switch
, aтроичный оператор или Map
тогда уже не имеет большого значения.Вы можете легко переключать реализации.
«Дополнительно»:
Вы также можете пойти еще дальше и извлечь реальную функцию: когда вы хотите преобразовать int
вColor
, то это именно то, что обозначено IntFunction
.
На первый взгляд это может показаться излишним абстракцией.Но я думаю, что это не так (иначе я бы не написал это в качестве ответа).
Таким образом, вы можете определить свой IntFunction
, как хотите, и в той точке кода GUI, где у вас естьзначение int
и Color
, вам нужно просто
Color color = colorFunction.apply(value);
Возможное преимущество этого состоит в том, что вы можете легко переключать схему окраски извне, например:
class YourGui {
// Initialize with some default
private IntFunction colorFunction = YourGui::colorFor;
// The function as described above
private static Color colorFor(int value) {
...
}
void setColorScheme(IntFunction colorFunction) {
this.colorFunction = colorFunction;
}
}
А затем позвоните
yourGui.setColorScheme(colorFunctionWith(CYAN, MAGENTA, YELLOW));
, чтобы изменить схему окраски ячеек.