特定格式字符串与Color对象双向转换方法咨询
字符串与Color对象互转方案(默认基于Java
java.awt.Color 类,其他语言逻辑可通用) 1. "Color.XXX" 字符串转Color对象
核心逻辑是解析字符串中的常量名,通过反射获取Color类中对应的静态常量值,无需手动维护映射关系。
代码实现:
import java.awt.Color; import java.lang.reflect.Field; import java.lang.reflect.Modifier; public Color stringToColor(String colorStr) { // 格式校验 if (colorStr == null || !colorStr.startsWith("Color.")) { throw new IllegalArgumentException("输入格式需为Color.XXX"); } String constantName = colorStr.split("\\.", 2)[1]; try { Field field = Color.class.getField(constantName); // 仅匹配静态的Color类型常量 if (field.getType() == Color.class && Modifier.isStatic(field.getModifiers())) { return (Color) field.get(null); } throw new NoSuchFieldException(); } catch (NoSuchFieldException | IllegalAccessException e) { throw new IllegalArgumentException("无对应Color常量:" + colorStr, e); } }
2. Color对象转"Color.XXX"格式字符串
提前遍历Color类的所有静态Color常量构建映射表,转换时直接查表返回结果,性能更高。
代码实现:
import java.awt.Color; import java.lang.reflect.Field; import java.lang.reflect.Modifier; import java.util.HashMap; import java.util.Map; public class ColorConverter { // 全局映射表,类加载时仅初始化一次 private static final Map<Color, String> COLOR_NAME_MAP = new HashMap<>(); static { for (Field field : Color.class.getFields()) { try { if (field.getType() == Color.class && Modifier.isStatic(field.getModifiers())) { COLOR_NAME_MAP.put((Color) field.get(null), field.getName()); } } catch (IllegalAccessException ignored) {} } } public static String colorToString(Color color) { if (color == null) { throw new IllegalArgumentException("Color对象不能为空"); } String constantName = COLOR_NAME_MAP.get(color); if (constantName != null) { return "Color." + constantName; } // 自定义Color无对应预定义常量时可根据需求调整返回逻辑,比如返回RGB值或抛出异常 throw new IllegalArgumentException("当前Color无对应预定义常量"); } }
补充说明
- 如果仅需要用到固定几个颜色,不想用反射,可以手动维护映射表,兼容性更强、性能更高:
// 手动映射示例,仅包含常用颜色 private static final Map<String, Color> STR_TO_COLOR = Map.of( "RED", Color.RED, "BLUE", Color.BLUE, "GREEN", Color.GREEN, "WHITE", Color.WHITE, "BLACK", Color.BLACK ); private static final Map<Color, String> COLOR_TO_STR = Map.of( Color.RED, "RED", Color.BLUE, "BLUE", Color.GREEN, "GREEN", Color.WHITE, "WHITE", Color.BLACK, "BLACK" );
- 其他语言场景逻辑完全通用:正向通过常量名取对应静态颜色值,反向构建值到常量名的映射查表即可。
内容的提问来源于stack exchange,提问作者FoxVocs
相关产品推荐
相关产品推荐

