設計時にプライベートインターフェイスが使用されていますか?もしそうなら、理由は何ですか?また、プライベートインターフェイスの必要性はいつ知っていますか?デザインの決定:インターフェイスをプライベートにする理由と時期
答えて
IMHOインターフェイスをプライベートにすることはできません。
しかし、私はしばしば一般用と内部用の2つのインタフェースを持っています。内部使用インタフェースIは、できるだけパッケージをローカルにする。
public interface MyInterface {
public void publicMethod();
}
interface DirectMyInterface extends MyInterface {
public void internalUseOnlyMethod();
}
内部的な使用方法では、他の開発者が使用したくない、または簡単に変更できるようにする方法が公開されています。私がインターフェイスを持っている理由は、インターフェイスを介して内部的に使用したいいくつかの実装があるからです。
あなたは内部使用パッケージが必要な理由は何ですか? 10年以上のJavaの経験で、私はこのパターンについては決して来ませんでしたが、あなたはそれを頻繁に**使用すると言います。 – Mot
私は多くの場合、他の開発者が使用しているライブラリやフレームワークを書いています。私はできるだけシンプルなインターフェイスを保つために、私は離れて私はespを離れて隠すことができる任意のメソッド。それらが他の開発者によって使用されることを意図していない場合。 –
インターフェイスが内部使用の場合は、パッケージ保護が必要です。 一般的に、インターフェイスの外側に関心がない場合は、インターフェイスのユーザーにとって複雑さが軽減され、より簡単にリファクタリングすることができるため、APIの設計上の決定はto hide itです。 APIを失うと自由を変えることができます。
トップレベルインターフェイスはプライベートにすることはできません。それはpublic
またはパッケージへのアクセス権しか持てません。 Java Language Specification, section 9.1.1: "Interface Modifiers"から:のみが宣言直接クラス宣言によって囲まれているメンバーインターフェイスに関する
アクセス修飾子保護およびプライベート(§8.5.1)。いずれかの場合に、そのサブクラスが、その最上位クラスの実装の詳細であるときはいつでも
ネストされたインターフェースはprivate
することができます。
たとえば、下位のネストされたインターフェイスCLibrary
は、最上位クラスの実装の詳細として使用されます。純粋にJNAのAPIを定義するために使用され、インターフェイスのClass
によって通信されます。
public class ProcessController {
private interface CLibrary extends Library {
CLibrary INSTANCE = (CLibrary) Native.loadLibrary("c", CLibrary.class);
int getpid();
}
public static int getPid() {
return CLibrary.INSTANCE.getpid();
}
}
別の例として、このプライベートインターフェイスは、カスタムの書式設定シンボルを実装するプライベートネストされたクラスによって使用されるAPIを定義します。
public class FooFormatter {
private interface IFormatPart {
/** Formats a part of Foo, or text.
* @param foo Non-null foo object, which may be used as input.
*/
void write(Foo foo) throws IOException;
}
private class FormatSymbol implements IFormatPart { ... }
private class FormatText implements IFormatPart { ... }
...
}
私はあなたの2番目の例が好きです。 –
@JordanStewart - ありがとう。実際のコードからは非常に単純化された例です。 –
- 1. Java:Cloneableインターフェイスの理由
- 2. クラスとグローバル変数を使用する時期と理由
- 3. 複数のビルドエージェントを使用する理由と時期
- 4. Androidインターフェイスのデザイン
- 5. Rails:メソッドをプライベートにする主な理由は何ですか?
- 6. デザインの質問:初期化を処理するには?
- 7. デザインの決定:複数のEF EDMXファイル
- 8. デザイン決定:データベース値に依存するOrderNumberを生成
- 9. カスタムジェネリックタイプまたはインターフェイスを許可しない理由WinRTの理由
- 10. 不思議なパディングが私のデザインを破る理由は?
- 11. 実行時にOSを決定する
- 12. デザイン時にコントロールの視覚的な状態を設定する
- 13. Property.forName()を使用する時期または理由は何ですか?
- 14. プライベート整数を別のプライベート整数に設定する
- 15. ランタイムとデザイン時のコントロール
- 16. Pythonで相対インポートを使用する時期または理由
- 17. このバイト配列を1024に初期化する理由
- 18. UIImageViewのUIBmageViewのデザイン時と実行時のデザインが異なる場合
- 19. System.AccessViolationExceptionの理由を特定する
- 20. UIVIewまたはUIViewControllerの複雑なビュー設定? (デザイン決定)
- 21. JumboEnumSetを使用する理由とその理由
- 22. デザイン時にWindowsフォームで画像をハイパーリンクとして設定する方法
- 23. インターフェイスの代理人とイベント?
- 24. synchronizedメソッドがインターフェイスに含まれない理由
- 25. WWF - Windowsワークフローサービスに関する初心者のためのシンプルなデザイン決定
- 26. Magento定期決済ソリューション
- 27. Serializableインターフェイスを実装するクラスがインターフェイスのメソッドを実装しない理由を教えてください。
- 28. 周波数と振幅の持続時間を決定する
- 29. テストが失敗した理由を解決する
- 30. jQueryのタブでデザインの決定を下すのに助けが必要
インターフェイスが特定のパッケージに含まれていないすべてのコードから抽象化されなければならないものについては? – thejh
インターフェイスは、ネストされたインターフェイスの場合はプライベートにすることができます。トップレベルのクラスまたはインタフェースは、publicまたはpackage-privateのいずれかです。 – Mot