Java图标常量 - 静态常量是否正常?

Dra*_*mon 5 java icons constants

我在整个应用程序中使用了许多图标 - 让我们以ok/cancel图标为例.目前它们可能是一个勾号和一个十字架(tick.png,cross.png),但我可能希望将来更换它们.另外,我想将资源路径保存在一个地方.

这个可以吗:

public class Icons {
    public static Icon OK = new ImageIcon(Icons.class.getResource("/icons/tick.png");
    public static Icon CANCEL = new ImageIcon(Icons.class.getResource("/icons/cross.png");
}
Run Code Online (Sandbox Code Playgroud)

或者我应该以不同的方式做这件事?我不介意在运行时依赖图像文件的存在,因为它们位于.jar中

我已经将Bent的想法用于初始化,并且我已经使常量最终:

public final class Icons {
    private static final Logger logger = Logger.getLogger(Icons.class);

    public static final Icon OK = icon("/icons/add.png");
    public static final Icon CANCEL = icon("/icons/cancel.png");

    private static Icon icon(String path) {
        URL resource = Icons.class.getResource(path);
        if(resource==null) {
            logger.error("Resource "+path+" does not exist");
            return new ImageIcon();
        }
        return new ImageIcon(resource);
    }
}
Run Code Online (Sandbox Code Playgroud)

Ben*_*eim 1

如果你想将图标保留为静态常量,我会将 ImageIcon 对象的实例化提取到静态方法中;

public static final Icon ok = icon("ok.png");


private static Icon icon(String path) {

    URL resource = Icons.class.getResource("/icons/" + path);
    if (resource == null) {
        // Log something...
        return null;
    }
    return new ImageIcon(resource);
}
Run Code Online (Sandbox Code Playgroud)

这样,每当出现故障时,您就可以进行控制,并且不必在实例化中重复自己。

另外,我会将常数定为最终常数。

更通用的方法可能是使用反射来检查 Icons 类并为类中的每个公共静态 Icon 字段加载资源。这样,你只需要声明一个新的 Icon 常量,相应的资源就会根据常量的名称自动加载。如果您需要更多提示,请发表评论。