我正在使用一个使用Color的库,但我需要Color的功能。有什么我可以做某事“演员”或什么的,所以我将能够使用颜色的方法?
- 编辑 -
颜色为jxl.format.Colour
;颜色为java.awt.Color
Color是一个内部库类,提供有限的功能。我想执行稍微更高级的操作。例如:
使用Color我只能指定一种颜色:
Colour bgcol = Colour.BLUE;
而Color为我提供了更多选项:brighter()
和darker()
方法,依此类推。
我的库强制我使用Color,例如:方法setBackground(Colour)
不适用于参数(Color)。
答案 0 :(得分:4)
首先 - 陈述您实际询问的内容。我们可以猜测您的Colour
是jxl.format.Colour
而Color
是java.awt.Color
,但这是猜测。
如果这是正确的,Color enum有一个getRGB()
方法,它返回颜色的红色,绿色和蓝色组成部分(我是英语,我自然地拼写颜色)。 java.awt.Color
类有一个接受这些组件的构造函数。
你可以这样做:
public static Color convert(Colour col) {
return new Color(
col.getDefaultRGB().getRed(),
col.getDefaultRGB().getGreen(),
col.getDefaultRGB().getBlue() );
}
要始终保存创建新Color
实例,您可以将翻译存储在EnumMap中。
答案 1 :(得分:2)
根据我的理解,您尝试将名称Colour
的所有表示形式转换为Color
。您尚未指定库文件的查找和替换是否最合适,因此我们假设您正在尝试定义通用接口以执行此修复。你没有在代码中指定任何其他需求,除了将这两者粘合在一起的愿望。您是否希望将其中一个填充到另一个类中以满足您可能具有的某些库或代码依赖性?这很难说。
因为classes aren't first-class objects in Java,我们可以通过为要用Colour
替换的Color
的每个实例定义一组接口或子类来实现此目的。 或者,我们可以使用Java reflection.
当然,这些都是您所表达的code smell所追求的黑客攻击:尝试迭代修复每个类的接口名称比定义IDE更难在现有代码中进行规则或修改,以与名为Colour
的每个类进行交互。所以,我实际上会建议后者尝试通过滥用超出预期范围的Java语言功能来解决这个问题。
修改:根据OP提供的更多信息,这是interface-stapling的愿望。我将把剩下的答案留给其他答案。