私はあなたが言っていることを知っています。例えば
私は、残念ながら
public interface ExecutableList<T extends ExecutableList<T,E>,E> //This is type parameter
extends List<E>, //self referencing. Trust
Comparable<E>, //me, it has its uses.
{
/** This would declare a constant but leave it to sub-interfaces/classes to define it. */
abstract String USER_FRIENDLY_NAME;
//Define the rest of your interface
}
USER_FRIENDLY_NAME
呼ばContantをStringフィールドを(私はExecutableListを呼び出しています)を持つインタフェースを持つようにしたい、これがJavaでできません。 Javaインタフェースでフィールドを宣言すると、修飾子public
,static
、およびfinal
が含まれます。Javaプログラミング言語の将来の変更により、abstract
が追加され、暗示的修飾子がpublic abstract static final String USER_FRIENDLY_NAME;
になりましたが、これに対してルールを明確に定義することができますが、abstract
という単語の使用は紛らわしく、abstract
とfinal
は通常理解されています反対の意味を定義する。
私は将来のバージョンのJavaがこれを実装することを指摘しています。私はプライベートインターフェイスのメソッドがJava 9で追加されると聞いていますが(デフォルトのメソッド間で使用するため)、この言語に加えてまだ単語はありません。最初に検討しなければならない多くの後方互換性の問題があると思います。 Oracleの誰かがこれを読んでいる場合は、インターフェースで米国の宣言定数を使用して、そのクラス/インターフェースを定義してください!
あなたの唯一の選択肢は、インターフェイスまたは抽象クラスにString getUserFriendlyName();
メソッドを定義することです。エレガントではなく、効果的ではないかもしれませんが、あなたは現在他に選択肢がありません。
潜在的に異なる値を持つ定数が定数ではないことに注目する価値はあるでしょう!だから、ピーターズの答えに行く。 – TedTrippin