4

戻り値の型として宣言/拡張クラスを使用してインターフェイス/抽象メソッドを作成する方法を見つけようとしていました。(たとえば、classA は interfaceA を拡張し、メソッドは ClassA オブジェクトを返す必要があります)。

今、コンパイラはそのようなことについて不平を言うことはありませんが、JVMはそのようなことを処理できないという投稿を見つけました。つまり、このメカニズムはJavaには存在しません。

そこで私は次のアイデアを思いつきましたが、それが技術的に十分に節約できるかどうかはわかりません。(例えば、ループが発生しますか)

public interface ISomeInterface<T extends ISomeInterface<T>> {
    public T get();
}

このような使い方ができるということです。これは、外部ユーザーに拡張クラスの使用を強制するものではありませんが、少なくとも必要に応じて使用する機会を提供します。

public class ExtendingClass implements ISomeInterface<ExtendingClass>{
    @Override
    public ExtendingClass get(){}
}

これでコンパイラ エラーや実行時エラーは発生しなくなりましたが、これを多用すると問題が発生するのではないかと懸念しています。

これが問題を引き起こすかどうかを誰かが確認できれば幸いです。(その他のフィードバックも大歓迎です)。

4

2 に答える 2

2

これには何も問題はありません。それは実際にはかなり一般的な方法です。

于 2016-04-02T19:34:53.163 に答える