宣言型/拡張型のクラスを返す型のインターフェイス/抽象メソッドを作成する方法を探していました。 (たとえば、classAはinterfaceAを拡張し、メソッドはClassAオブジェクトを返す必要があります)。インタフェース/抽象メソッドの戻り型としてのJava拡張クラス
コンパイラがそのようなことについて文句を言わないポストを見つけましたが、JVMはこのようなことを処理できません。この整備士はjavaには存在しません。
私はそれが技術的に十分であるかどうかわからないから、次のアイデアを思いついた。 (ループを引き起こすなど)
public interface ISomeInterface<T extends ISomeInterface<T>> {
public T get();
}
このように使用することができます。これは拡張クラスを使用する外部ユーザーを強制doesntのが、それは少なくとも好まあればそうする機会を与えてくれます:
public class ExtendingClass implements ISomeInterface<ExtendingClass>{
@Override
public ExtendingClass get(){}
}
さて、これは何のコンパイラやランタイムエラーを与えていないが、これは作成した場合、私は心配します広範に使用されていれば問題ありません。
誰かがこれが問題の原因かどうかを確認できたらうれしいです。 (他のフィードバックも歓迎されます)。
これはうまく動作すると思います。これは、Javaが 'enum'型に使用するのと同じパターンです。このパターンは[public class Enum>(https://docs.oracle.com/javase/8/docs/api/java/lang)として宣言されています。 /Enum.html) –
markspace
これはどのようにしてコンパイルエラーを生じさせませんか?実装クラスは抽象クラスではないため、このためのメソッド本体が必要です。 – Makoto
@Makotoこれは本当にエラーを出すでしょう:D、単なる例でした。今すぐ変更しました。 – n247s