interface还是final class?还是enum?

探讨在代码中定义常量的最佳方式,对比interface、final class与enum的优缺点,提出适合不同场景的建议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

interface还是final class?还是enum?

  • 很久没老老实实写过技术的博客了,最近事情很多很杂也很乱,很难沉下心去做一件事情,最终找到一个合理的答案,懒!原本我是计划今年写满100篇博客的,因为各种“懒”,呵呵了,估计又要成为明年的计划了。。。。。。?,言归正传

最近无论是在写代码和看别人代码的时候,经常看见各种常量的定义,有很简单粗暴的硬编码,也有接口,枚举各种百花齐放,充分体现我等高超技艺,花式代码,但是怎么说呢,首先

  • 除非作死,千万别硬编码,review代码首先你过不了,其次,代码难维护,害自己也可能害接手你代码的人
  • interface
public interface Const {

    Integer PAGE_SIZE = 10;
}

写个接口定义常量总可以吧。看起来似乎不错,但是似乎错了interface的本质,我们通常定义api才去用接口,而不是为了方便。而且,也不是那么方便,比较,如果你取名不形象,生动,直观…那你注释也少不了。这些还不是最主要的,既然是接口,然后就允许有子接口和类去实现,那问题来了,那天我不小心把最上层的内容改了,这些子类或者字接口不是也要去改吗?有个资料把这种方式修饰成“poor use”,不推荐使用。

  • final class
public final class Const {
    private Const() {
    }
    public static final String SUCCESS="成功";
    public static final String FAILURE="失败";
    public static final String EXCEPTION="异常";
}

个人觉得这种方式还是不错的,首先这个“鸡肋”是不能被继承的,然后有个私有的构造函数,那么别人也不能去实例化该类,常量都是static final 去修饰,static 强调只有一份,final 说明是一个常量,你该懂的它的含义了吧。

-Enum

public class Constants {
	private Dict(String value,String name){
		this.value=value;
		this.name=name;
	}
	private final String value;
	private final String name;
	public String getValue() {
		return value;
	}
	public String getName() {
		return name;
	}
}

写法比上面稍微复杂了点,但是用起来还是不错的,而且可以根据你的业务需求创造出适合你的枚举,比较好。

最后两种,很难说哪个好,那个坏,适合当前业务需求我觉得才是最好的,前两种还是谨慎使用

如果是定一个什么单个字符常量什么的,我觉得第三种不错,如果是经常有什么status,type的这种,我觉得enum会更好。

既然今天都说了interface,那么,下次做一个老生常谈的话题,interface和抽象类专访。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值