您有一个int 值。并且您想为此 int 值获取 Color。
您可以为此使用if-statements:
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);
您是否使用if、switch、三元运算符或Map 来实现colorFor 函数就不再重要了。您可以轻松切换实现。
“高级”:
你还可以更进一步,拿出实际的功能:当你想将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));
更改单元格着色方案。