【发布时间】:2012-08-13 16:32:04
【问题描述】:
我经常发现我想做这样的事情:
class Foo{
public static abstract String getParam();
}
强制 Foo 的子类返回参数。
我知道你做不到,我知道你为什么做不到,但常见的替代方法是:
class Foo{
public abstract String getParam();
}
不能令人满意,因为它要求您拥有一个实例,如果您只想知道参数的值并且实例化该类的成本很高,这将无济于事。
我很想知道人们如何在不使用“常量接口”反模式的情况下解决这个问题。
编辑:我将添加一些关于我的具体问题的更多细节,但这只是我想做这样的事情的当前时间,过去还有其他几个。
我的子类都是数据处理器,超类定义了它们之间的公共代码,允许它们获取数据、解析数据并将其放在需要的地方。 每个处理器都需要某些参数,这些参数保存在 SQL 数据库中。每个处理器都应该能够提供它需要的参数列表和默认值,以便通过检查每种处理器类型所需的参数来验证配置数据库或将其初始化为默认值。 在处理器的构造函数中执行它是不可接受的,因为它只需要每个类执行一次,而不是每个对象实例一次,并且应该在系统启动时完成,此时可能还不需要每种类型的类的实例。
【问题讨论】:
-
如果你已经打电话给
Class.getName(),为什么还要知道名字? -
这是一个例子。我可以说得到 gigawidgets
-
有趣的问题。你有一个方便的具体例子吗?它可能有助于激发一些想法。 Scala 有一个很好的方法来处理这个问题——它是对象和类之间的区别——这可能对你没有多大帮助。
-
@jeff 我添加了更多细节。问题。我想我可以很容易地在 Scala、Python 或 C# 中做我想做的事,所以令人惊讶的是它们似乎不是 java 等价物。
标签: java