Java实用程序类

public final class SomeUtilityClass {
    public static final String SOME_CONSTANT = "Some constant";

    private SomeUtilityClass() {}

    public static Object someUtilityMethod(Object someParameter) {
        /* ... */

        return null;
    }
}

现在,随着接口中的静态方法在Java 8中,我最近发现自己使用了实用程序接口模式:

public interface SomeUtilityInterface {
    String SOME_CONSTANT = "Some constant";

    static Object someUtilityMethod(Object someParameter) {
        /* ... */

        return null;
    }
}

这允许我去掉构造函数,以及许多关键字(publicstaticfinal)是在接口中隐式的。

这种做法有什么坏处吗?在实用程序接口上使用实用程序类有什么好处吗?

小川小川提问于
圣才程序互联网回答于

不应该使用接口。接口不能有私有常量和静态初始化器。

public class Utility {

    private Utility() {}

    public static final Map<String, Integer> MAP_CONSTANT;
    static {
        Map<String, Integer> map = new HashMap<>();
        map.put("zero", 0);
        map.put("one", 1);
        map.put("three", 3);
        MAP_CONSTANT = Collections.unmodifiableMap(map);
    }

    private static String PRIVATE_CONSTANT = "Hello, ";

    public static String hello(String name) {
        return PRIVATE_CONSTANT + name;
    }
}

回答过的其他问题

由于主键约束导致的T-SQL存储过程异常

圣才程序互联网
在TSQL中,您可以使用TRY / CATCH。发生错误时,后续操作可以继续运行并提交到表。 这样做: CREATE TABLE #test1 (ID INT PRIMARY KEY) GO CREATE TABLE #test2 (ID INT PRIMARY KEY) ...... 展开详请

将产品图像与底部垂直对齐

圣才程序互联网
有几种方法可以解决这个问题。这是我建议的解决方案。 您遇到的主要问题是图像大小不同。如果图像大小相同,则不会出现问题。所以,这是你需要解决的问题。 以一看CSS的Inspect Element,有一对夫妇的事情,我观察到。首先,有一个样式定义如下: img, video, o...... 展开详请

KDB:如何为所有列分配字符串数据类型

圣才程序互联网
您不能使用字符串定义空表的列,因为它们只是字符列表的列表 您可以将它们设置为空列表,这是您的代码正在执行的操作。 但是该列将采用插入其中的任何数据的类型。 真正的问题是你的java进程在应该发送字符串时发送符号是什么。在发布到KDB之前,您需要在那里进行更改 请注意,如果您定...... 展开详请

Sublime Text 3:首选项菜单为灰色

圣才程序互联网
一些建议认为第三方Mac应用程序可能会导致问题。因此,您可以尝试重新启动Sublime Text - 我想您在寻找解决方案之前已经这样做了,尝试在以下每个步骤之后再次执行此操作: 重新启动菜单栏Bartender或SecondBar(如果存在) 重新安装最新安装的ST软件包 ...... 展开详请

获取按钮以自动应用于导入的模块

圣才程序互联网
使用[Alt]+ 分配宏时[F8](弹出宏窗口 - 或者,单击“开发人员”选项卡中的“宏”) 有一个选项(Macros in :),请选择“This Workbook”而不是“All Open Workbooks”,您可以将您创建的正确宏指定给按钮。 📷 ... 展开详请

在Java中无法正常工作的方法有哪些?

圣才程序互联网
如果只想在不包含任何列入黑名单的单词时打印单词,则条件应如下所示: for (String place:placeSet) { if (!(place.contains("traffic") || place.contains("collapse"))...... 展开详请

所属标签

扫码关注云+社区