我已經搜索了相當多的時間來得到這個解決方案,但沒有一個人足夠舒適以便被接受。爪哇力靜態字段繼承
假設我們有一個抽象類,它的所有子類都將提供一個靜態和最終字段。
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),當您最好的解決方案是完全使用不同的方法時,您會問「如何解決此代碼問題」。考慮告訴我們你試圖解決的整體問題,而不是你目前試圖解決的問題,因爲再次,你的方法可能是錯誤的。 –