私はすでに解決策を得るのにかなりの時間を捜しましたが、どれも受け入れられるほど快適ではありませんでした。Java force static field inheritance
抽象クラスがあり、そのすべてのサブクラスが静的で最後のフィールドを提供するとします。
abstract class A {
static final Field FOO;
}
class B extends A {
static final Field FOO = new Field("foo");
}
それはこのようなものだ:そこBのインスタンスでなければならず、私は彼らが私は抽象メソッドをしなければならないだろうが、そこに私は再び同じ問題を持っていることを意味し、ゲッターを持っている必要はありません。
ゲッター:
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.
}
私は特定の名前(設定値)IがクラスAをadressing際へのアクセス権を持っているとのstatic finalフィールドを持つサブクラスを強制するために何ができますか?
EDIT (私はすでにこの1の上の部分を編集したが、ここで、これは完全に新しいです):実際に
、私が望むすべては、次の操作を実行することです:
私は、抽象を持っていますクラスComponent
と呼ばれます。プラグインから他のクラスを取得するプログラムを作ってみたい。これらのクラスは、いくつかのフィールドとメソッドをComponent
から継承します。彼らはまた、静的なIDを持つように強制されます。問題は今です:クラス(プラグインによって提供されるクラス)にそのようなフィールドを持たせるにはどうしたらいいですか?
が鳴ります。 –
あなたの状況は不明です。指定したコードはコンパイルされません( 'A 'に' FOO'に値を与えなかったので)。さらに、あなたのコード内のクラスも抽象クラスでも、 'Object'以外のサブクラスでもないので、抽象クラスとあなたが話しているサブクラスは明確ではありません。直面している状況を実際に示すコード例を挙げられますか?あなたが避けたいと言っているゲッターは何ですか? – RealSkeptic
あなたの質問は実際には[XY問題](http://mywiki.wooledge.org/XyProblem)であるかもしれませんが、最良の解決策は完全に別のアプローチを使用することです。やはりあなたのアプローチが間違っている可能性が高いので、現在解決しようとしている方法ではなく、解決しようとしている全体的な問題を教えてください。 –