Java用类定义常量和在接口定义常量的区别

public final class DatabaseConst {

	private DatabaseConst() {}

	public static final String MYSQL = "MySQL";
	public static final String MariaDB = "MariaDB";
}

//与
public interface DatabaseConst {
	String MYSQL = "MySQL";
	String MariaDB = "MariaDB";
}

有什么区别? 各有什么好处?

DatabaseConst 的两种实现方式(使用 final classinterface)在 Java 中各有特点和适用场景。以下是它们之间的主要区别和各自的优缺点:

1. 使用 final class

public final class DatabaseConst {
    private DatabaseConst() {}

    public static final String MYSQL = "MySQL";
    public static final String MariaDB = "MariaDB";
}
特点
  • 不可继承:使用 final 修饰符,表示这个类不能被继承。
  • 静态常量:使用 public static final 定义的常量,可以直接通过 DatabaseConst.MYSQL 访问。
优点
  • 命名空间清晰:可以避免与其他类或接口中同名常量的冲突。
  • 可以包含其他方法:可以在其中定义其他静态方法或逻辑。
  • 创建实例的保护:构造函数是私有的,禁止实例化。

2. 使用 interface

public interface DatabaseConst {
    String MYSQL = "MySQL";
    String MariaDB = "MariaDB";
}
特点
  • 隐式的 public static final:接口中的变量默认是 public static final,因此可以直接访问。
  • 实现的约束:类实现接口时,可以引入这些常量。
优点
  • 简单直接:接口定义常量的语法简洁,容易理解。
  • 多重实现:一个类可以实现多个接口,可以利用接口的组合特性。

总结

  • 选择 final class 更合适当你想要定义一组相关的常量,并且可能需要为这个类添加方法或其他逻辑时。
  • 选择 interface 则适合需要通过继承来组合常量,或者只需要存放常量且希望简单化代码结构的场合。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值