我经常发现我想做这样的事情:
class Foo{
public static abstract String getParam();
}
强制 Foo 的子类返回参数。
我知道你不能这样做,我知道你为什么不能这样做,但常见的选择是:
class Foo{
public abstract String getParam();
}
不能令人满意,因为它要求您拥有一个实例,如果您只想知道参数的值并且实例化该类是昂贵的,那么这将无济于事。
我很想知道人们如何在不使用“常量接口”反模式的情况下解决这个问题。
编辑:我将添加一些关于我的具体问题的更多细节,但这只是我想做这样的事情的当前时间,过去还有其他几个。
我的子类都是数据处理器,超类定义了它们之间的公共代码,允许它们获取数据、解析数据并将其放在需要的地方。每个处理器都需要某些参数,这些参数保存在 SQL 数据库中。每个处理器都应该能够提供它需要的参数列表和默认值,以便通过检查每种处理器类型所需的参数来验证配置数据库或将其初始化为默认值。在处理器的构造函数中执行它是不可接受的,因为它只需要为每个类而不是每个对象实例执行一次,并且应该在系统启动时完成,此时可能还不需要每种类型的类的实例。