そのため、プログラムの設定を処理する際に少し問題が発生しました。これが使用される回数を考慮すると、単一の方法を使用するのが最適です。各変数のゲッターは、ファイルが大幅に大きくなる可能性があります。
(5フィールド* 200〜300クラス=多くの無駄なスペース)
サブクラスから定義された定数名でフィールドにアクセスする方法を理解しようとしています。
スーパークラスは抽象であり、リストで定義されており、私はそれに完全にアクセスできます。これは、フィールドのゲッターを入れてほしいクラスです。
私がそれを機能させたい方法は次のようになります:
import java.lang.reflect.Field;
public class Test {
public Test() {
final B b = new B();
final C c = new C();
System.out.println(b.getFoo());
System.out.println(c.getFoo());
}
public static void main(String[] args) {
new Test();
}
public class A {
public String getFoo() {
try {
Field f = this.getClass().getField("FOO");
f.setAccessible(true);
return (String) f.get(null);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}
public class B extends A {
private static final String FOO = "$HOME.DIR/lib/res/image1.png";
}
public class C extends A {
private static final String FOO = "$HOME.DIR/lib/res/image2.png";
}
}
予想通り、それはうまくいきませんでした。クラスA
にはフィールド「FOO」が含まれていません。理想的には、それが機能していれば、私はそれが印刷されることを期待していたでしょう:
$ HOME.DIR / lib / res / image1.png
$ HOME.DIR / lib / res / image2.png
これが可能であると私が(これまでに)見てきた方法:
- 反射
- ゲッターの使用-避けたい
- 注釈の使用
注釈を使用することは、それが可能であると私が理解できる1つの方法でしたが、一般的には注釈の全体的な概念は好きではありませんが、それが唯一の方法である場合はもちろん受け入れます。
これを読んでいただきありがとうございます、うまくいけばあなたは洞察を提供することができます。