クラスimplement
をインターフェースとして使用せず、代わりに最後のフィールドを直接使用する利点はありますか?例えば:最終フィールドまたはインターフェイスに直接アクセスするインターフェイスを実装しますか?
public interface MyInterface {
int CONST_A = 16;
int CONST_B = 45;
}
アプローチ1:
public class MyClass implements MyInterface {
MyClass() {
System.out.println("A = " + CONST_A);
System.out.println("B = " + CONST_B);
}
}
アプローチ2:上記の方法のいずれかは、他の上の任意の種類の利点を有している場合
public class MyClass {
MyClass() {
System.out.println("A = " + MyInterface.CONST_A);
System.out.println("B = " + MyInterface.CONST_B);
}
}
私は思っていました。このような状況が発生する場所の1つがBlackberryで、ローカライズされたテキストが文字列のキーとのインターフェイスとして定義されているため、コードのさまざまな部分でキーを引数としてシステムAPIを呼び出す必要があります。例えば
定数の
多くのクラスがそのインターフェイスを実装している場合、多くのクラスがそれらの文字列にアクセスする必要があるため、これらの定数へのアクセスポイントを多数作成するのは間違いありません。しかし、私はまだこれが悪いことであると確信していませんか?フィールドは最終的なものなので、すべてのアクセスポイントが実際に同じ値に変換されます。しかし、Emmerichが述べたように名前の競合が発生する可能性がありますが、TXT_xxxxなどの定数に適切なパターンが使用されている場合は、少なくともBlackberryでは問題にはなりません。 – aligf
これは設計上の問題です。誰が定数を所有しているのかを定義する必要があります。それらが多くのクラスによって実装されたインターフェイスに格納されている場合、所有権は不明です:Interface.CONST、Class1.CONST、Class2.CONST ...はすべて同じ定数を参照します。リファクタリングと設計の明快さを簡単にするには、MyConsts.CONSTのような単一のクラスを使用してアクセスするほうがよいでしょう。 –