Java 基础 - 常量是定义在接口还是类中?

本文探讨了在Java中定义常量的三种方式:枚举、常量类和接口。枚举提供全局唯一的实例,适合状态有限的场景。常量类通过final字段和私有构造函数确保不可实例化,适合定义一组相关常量。接口定义常量虽然不推荐,但在内部接口中仍有一定适用性。同时,文章提到了工具类的创建,建议使用抽象类如`UuidUtils`来提供静态方法。
该文章已生成可运行项目,

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

  1. 优先定义在枚举类中
public enum Constants {
    TRUE(1),FALSE(2); // 每一个都是全局唯一的实例(单实例)
    private int status;
    private Constants(int status){
        this.status = status;
    }
    public int getStatus() {
        return status;
    }
}
  1. 其次是常量类中,以 final 字段修饰 class 防止其被继承,并将其构造函数 private 化,防止被实例化。
public final class Constants {
	private Constants() {}
	public static final int TRUE = 1;
	public static final int FALSE = 0;
}
  1. (不推荐)在接口中定义常量

interface 的属性默认是 public static final

public interface MyInterface {
    int CONSTANT_VALUE = 100; // 默认是 public static final
}
  1. abstract class 抽象类常作为工具类使用 (Spring 中工具类代码是这样, 常量也可放在工具类中)

abstract class 是一种不能实例化的类, 可包含抽象方法, 除此之外和普通类没有别的不同

接口的可用之处

在《Effective Java》一书中写到,因为接口可以被继承,常量内容会代入到实现类代码中。这样对于一个接口来说是不合理。

但在一个已存在的类中, 可以作为内部分组:在类内部使用接口,作为内部接口。更直观简洁。

	public static final String EMAIL = "email";
    public static final String USERNAME = "custNo";

	public interface Role {
        int ROLE_NORMAL = 0; // 普通用户
        int ROLE_ADMIN = 1; // 管理员
    }

工具类

  • 工具类推荐使用 Spring 的方式, 使用抽象类即可
// Spring 工具类定义
public abstract class StringUtils {
}
// Spring 的常量也定义在类中
public class MediaType extends MimeType implements Serializable {
	public static final String APPLICATION_JSON_VALUE = "application/json";
}
  • 示例
public abstract class UUIDUtils {
    public static String generatedUUID16() {
        return UUID.randomUUID().toString().replaceAll("-", "").substring(0, 16);
    }
}
本文章已经生成可运行项目

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值