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)是在接口中隐式的。

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

小川小川提问于
嗨喽你好摩羯座回答于
已采纳

基于创建常量接口模式的人--反模式,我会说,虽然不打算客户端实现接口,但它仍然是可能的,也可能更容易,而且不应该允许:

API应该易于使用,而且很难被滥用。做简单的事情应该容易,做复杂的事情是可能的;不可能,至少是很难做错事。

它确实取决于目标受众。

许多易于使用的设计模式受到了很多批评(上下文模式、单例模式、常量接口模式)。即使是设计原则,如demeter定律,也因过于冗长而受到批评。

我不想这么说,但这些决定都是基于意见的。虽然上下文模式被视为反模式,这在主流框架中很明显,比如Spring和AndroidSDK它归结为环境,以及目标受众。

我能找到的主要缺点中的“不利”项下的第三个列表。常量界面维基

回答过的其他问题

系统盘装错了,更换系统盘应该怎么选择?

嗨喽你好摩羯座
是的,可以更换为windows,如果是同平台内:Linux-Linux;Windows-Windows 如linux换linux,windows换windows,可以直接在云主机控制台的重装系统按钮进行自主更换; 操作步骤:登录云主机管理中心控制台->选中需更换系统的云主机->更...... 展开详请

请问 :超过30s没有数据发送,主动断开连接,-1307这个是什么原因造成的???

嗨喽你好摩羯座
你说的-1307是下面这个吧: PUSH_ERR_NET_DISCONNECT = -1307, // 网络断连,且经多次重连抢救无效,可以放弃治疗,更多重试请自行重启推流 文档地址 SH_WARNING_SERVER_NO_DATA = 30...... 展开详请

iOS demo运行不了?

嗨喽你好摩羯座

依赖文件加载了吗?没有加载依赖文件一般都是缺少文件的提示,尝试加载以下依赖文件看一下:

libz.tbd
Accelerate.framework
Bugly.framework

GET调用为什么发生错误?

嗨喽你好摩羯座
60008错误,可通过以下方式定位解决: 1、如果请求在1s内响应60008错误码,请确认请求格式是否是标准HTTP格式; 2、确认dns配置是否正常,确保使用的是公网dns server; 3、推荐业务使用http长连接,并使用连接池,以提升网络质量;... 展开详请

wafer2-startup-master 对 mysql数据库 的增删改查?

嗨喽你好摩羯座

Knex.js是一个用于Postgres,MSSQL,MySQL,MariaDB,SQLite3,Oracle的SQL查询构建器,也就是你说的增删改查。Knex.js文档使用教程在这里,你可以学习一下使用办法:

http://knexjs.org/

不同的项目应该用哪种数据库更合适?该如何选择?

嗨喽你好摩羯座
要说应用场景首先要从其特点说起: 存储数据的格式:非关系型数据库的存储格式为文档、图片、key,value形式等,可以存储基础类型之外,还有集合或对象等各种格式。而关系型数据库只能存储基础类型。 查询速度:非关系型数据库将数据存储在缓存中,而关系型数据库将数据存储在硬盘中,关系型...... 展开详请

所属标签

扫码关注云+社区