Javaプログラミングでは、@Deprecated表記法とインターフェイスメソッドを使用する利点がありますが、それを実装するクラスではありません。@Deprecated表記をインターフェイスでのみ使用する利点は何ですか?
答えて
私はそれがJava言語そのものの欠点だと思っています。インタフェース内のメソッドをアノテーションで廃止し、メソッドを実装クラスで廃止予定とみなさないように指定するのはナシです。
メソッドの@ deprecated-nessが継承された方が良いでしょう。残念ながら、Javaはこれをサポートしていないようです。
IDEのようなツーリングがこのような状況をどのように処理するかを考えてみましょう。変数の型がインターフェイスであると宣言されている場合、@deprecatedメソッドはストライクスルーでレンダリングできます。しかし、変数の型が実装クラスであると宣言され、クラス署名に@deprecatedが含まれていない場合、メソッドはストライクスルーなしでレンダリングされます。
基本的な質問は、インターフェイスではなく、実装クラス(または拡張インターフェイス)で非推奨にする方法はどういう意味ですか?唯一の妥当な意図は、クラス階層内のインターフェースの下のすべてのものについてメソッドを非推奨にすることです。しかし、その言語はその行動をサポートしていません。
はそれが物議です。人がインタフェースにコード化した場合、そのインタフェースの特定の側面を廃止予定とすることができます。そのように人々はそれを使用しないことを知っている。
インターフェイスの実装クラスは詳細です。そのクラスのメソッドは、インタフェースを満足していますが、単独では非推奨にすることはできません。そのメソッドを非推奨にするかどうかは適切かもしれません。
インターフェイスを実装する新しいクラスを作成すると、廃止予定のメソッドを実装する必要があります。クラスのクライアントが廃止予定のメソッドを使用していないことが分かっていない限り、おそらく機能するはずです。たとえば、HTTPサーブレットコンテナを作成する場合は、encodeURL()
が推奨されていますが、HttpServletResponse.encodeUrl()
メソッドを実装する必要があります。それはあなたのクラスのユーザーがその廃止予定のメソッドを呼び出すかもしれないからです。
@Deprecatedは文書である(ない場合は反例を提供してください)非推奨のメソッドインタフェースは、それが実装だかかわらず、使用できないべきではありません:私の意見では
public interface Joe {
@Deprecated
public void doSomething();
...
}
public final class Joseph implements Joe {
public void doSomething() {
...
}
...
}
「[実装]メソッドを非推奨にすることは、適切でないかもしれません。具体的には、インタフェースメソッドdoSomethingはJoeのすべての実装には適していませんが、この特定の実装Josephには適している可能性があります。したがって、この特定の実装ではなくインタフェースでの非推奨です。 – drew
インタフェースと実装で不適切なメソッドで既存のコードをリファクタリングする場合は、インターフェイスメソッドで@Deprecated
を使用して、いくつかのリリースで新しいメソッドをクリーンにすることができます。私たちがそれを利用できるようにコードを下位互換性を保つためには、醜いかもしれません。これにより、IDEおよびSONARレポートで廃止予定のメソッドが表示され、クライアントに新しいメソッドを使用させることが示されます。
- 1. C#でインターフェイスを使用する利点は何ですか?
- 2. 使用して、インターフェイスの利点は何ですか
- 3. Python 3を使用する利点/利点は何ですか?
- 4. プロキシキャッチサーバーを使用する利点と欠点は何ですか?
- 5. インターフェイスと抽象クラスの利点は何ですか?
- 6. TextBox上でRichTextBoxを使用する利点は何ですか?
- 7. メソッドシグネチャでジェネリックを使用する利点は何ですか?
- 8. MVVMLightでSimpleIoCを使用する利点は何ですか?
- 9. サプライヤをJavaで使用する利点は何ですか?
- 10. WebアプリケーションでEJBを使用する利点は何ですか?
- 11. wpfでWeb APIを使用する利点は何ですか?
- 12. pgbouncerでトランザクションプーリングを使用する利点は何ですか?
- 13. __iter __()でyieldを使用する利点は何ですか?
- 14. Pythonでcimportを使用する利点は何ですか?
- 15. ThreadPoolExecutorでWaterMarkExecutorを使用する利点は何ですか?
- 16. AWSでDockerを使用する利点は何ですか?
- 17. ErlangでRabbitMQを使用する利点は何ですか?
- 18. 使用する利点何
- 19. 埋め込みObjectifyクラスを使用する利点は何ですか?
- 20. プライベートクラウドをデータセンターに使用する利点は何ですか?
- 21. Subversionを使用する利点は何ですか?
- 22. emacsオートフィルモードを使用する利点は何ですか?
- 23. FetchXmlを使用する利点は何ですか?
- 24. Animator.StringtoHash( "")を使用する利点は何ですか?
- 25. 名前空間を使用する利点は何ですか?
- 26. Redux over Reactを使用する利点は何ですか?
- 27. エラーバックを使用する利点は何ですか?
- 28. babel-plugin-react-intlを使用する利点は何ですか?
- 29. SFSafariViewControllerを使用する主な利点は何ですか?
- 30. Saxonを.netに使用する利点は何ですか?
とにかくインターフェイスで-only-メソッドを償却するのはなぜですか?あなたのリリースのドキュメントに "Interface 'Joe'を使用することはお勧めしません。か何か。 – Zack
インターフェイスとクラスには他の方法があります。混乱のために申し訳ありませんザック。 –