在 Java 中继承常量的最佳实践是什么?



我有一个抽象类,它有一些每个子类将使用的常量。它们中的每一个都是静态的、最终的和不可变的。

public abstract class MyAbstract {
//some private instance fields
protected static final long LONG_ID = 1;
protected static final String STRING_ID = "example_id";
//some methods
}

我知道受保护的静态决赛是不好的做法,但是不可变的受保护静态决赛呢? 我知道我可以将它们公开,但我想避免这样做,因为常量指的是用户不需要知道的特定 ID。

为了回答你在标题"在Java中继承常量的最佳实践是什么?"中的问题,我的回答是:根本不继承它们。

继承在面向对象的编程中具有特殊的含义和目的,仅仅为了方便起见而使用继承,因为您希望能够访问一组特定类中的常量,这与这种含义和目的不符。

如果您有希望能够在不同类中使用的常量,则可以将这些常量放在单独的类中。 使此类final并使构造函数private,以便它不能被子类化和实例化:

package com.example;
public final class Constants {
public static final long LONG_ID = 1L;
public static final String STRING_ID = "example_id";
// Private constructor, this class should not be instantiated
private Constants() {
}
}

然后,在要使用常量的类中,使用import static

import static com.example.Constants.LONG_ID;
public class Example {
public void someMethod() {
// Use the constant
long id = LONG_ID;
System.out.println(id);
}
}

优点是类Example不需要扩展类Constants或实现接口,因此您不需要滥用继承,同时您仍然具有相同的便利性,能够以简洁的语法使用常量。

相关内容

最新更新