我已经搜索了相当多的时间来得到这个解决方案,但没有一个人足够舒适以便被接受。爪哇力静态字段继承
假设我们有一个抽象类,它的所有子类都将提供一个静态和最终字段。
abstract class A {
static final Field FOO;
}
class B extends A {
static final Field FOO = new Field("foo");
}
是这样的:应为B的情况下,我不希望他们有一个getter,这意味着我将不得不作出一个抽象的方法,但我再次有同样的问题。
消气:
abstract class A {
static final Field FOO;
public Field getFOO() { return A.FOO; }
// This method is not that great as I need it to be static.
// Also, as it refers to class A, but if I want to let B inherit this method it won't refer to B.FOO.
public static Field getFOO() { return FOO; }
// This method is not inherited due to being static.
// Because it is not inherited, it can't be what I want.
}
我能做些什么来强制具有特定名称(设定值),我有机会adressing A级时,静态最终场的子类?
编辑(我已经编辑上面这一个部分,但在这里,这是全新的):
其实,我要的是要做到以下几点:
我有一个抽象这个类叫做Component
。我想制作一个从插件获取其他类的程序。这些类应继承Component
的一些字段和方法。他们也将被迫拥有一个静态ID。现在的问题是:我如何强制类(由插件提供)拥有这样的字段?
听起来像是你需要一个接口。 –
你的情况还不清楚。您提供的代码将无法编译(因为您没有给'A'中的'FOO'赋值)。此外,您不清楚什么是抽象类和您正在讨论的子类,因为代码中的任何类都不是抽象的,也不是除“Object”之外的任何子类。你能给出一个实际显示你正面临的情况的代码示例吗?你在谈论什么你想避免的吸气剂? – RealSkeptic
您的问题实际上可能是一个[XY问题](http://mywiki.wooledge.org/XyProblem),当您最好的解决方案是完全使用不同的方法时,您会问“如何解决此代码问题”。考虑告诉我们你试图解决的整体问题,而不是你目前试图解决的问题,因为再次,你的方法可能是错误的。 –