46

Java のクラス内でインターフェイスを宣言する必要があるのはなぜですか?

例えば:

public class GenericModelLinker implements IModelLinker {

  private static final Logger LOG =LoggerFactory.getLogger(GenericModelLinker.class);
  private String joinAsPropertyField;
  private boolean joinAsListEntry;
  private boolean clearList;
  private List<Link> joins;

  //instead of a scalar property
  private String uniqueProperty;

  public interface Link {

    Object getProperty(IAdaptable n);

    void setProperty(IAdaptable n, Object value);

  }
}
4

5 に答える 5

39

概念を強調するためにオブジェクト内のいくつかのフィールドを収集する場合は、外部クラスまたは内部 (ネストされた (静的なもの) または内部と呼ばれる) を作成できます。

この協調的なクラスは、元のオブジェクトの使用以外ではまったく意味がない (役に立たない) という事実を強調したい場合は、ネスト/内部にすることができます。

したがって、何らかの階層を扱う場合interface、ラッピング クラスのサブクラスによって実装される「ネストされた」 を記述することができます。

JDK では、最も重要な例はMap.Entry内部インターフェイスであり、インターフェイス内で定義さMapれ、さまざまな方法で実装されHashMapますLinkedHashMap

そしてもちろん、コードがどこにあってもマップを反復しながらアクセスできるようにするためにMap.Entryは、 as を宣言する必要がありました。public

于 2013-05-20T11:42:29.933 に答える
13

インターフェイス定義が小さく、そのインターフェイスが定義されているクラスのクライアントによってのみ使用される場合は、コードを整理するのに適しています。それ以外の場合は、インターフェイスを独自のファイルで定義する必要があります。

于 2013-05-20T11:40:08.267 に答える
5

これは内部インターフェースです。Java プログラミング言語では、内部クラスとインターフェースを定義できます。これは通常、現在の外部クラスのスコープによってこのクラスまたはインターフェイスの可視性を制限する場合に役立ちます。

このメカニズムを使用して、一種の名前空間を作成する人もいます。私見ですが、これは言語機能の悪用です (ほとんどの場合)。

于 2013-05-20T11:39:15.407 に答える
2

一般的で再利用可能な方法で動作をカプセル化する。

実装クラスでMap.Entry使用されるの良い例とは別に、別の良い例は の実装です。ここでは、実行戦略が内部で評価および適用されます。MapStrategy Pattern

class Test
{

..
interface Cipher {
 doAction();
}
class RAMPCipher implements Cipher{}
class DiskCipher implements Cipher{}
..
}
于 2013-05-20T11:56:56.703 に答える
1

クラス内では、この特定のクラスにのみ関連するインターフェイスの複数の実装が必要になる場合があります。その場合は、パブリック/パッケージ プライベートではなく、内部インターフェイスにします。
プライベートまたはプロテクトとして宣言できるのは、クラス内のインターフェイスのみです。場合によっては、インターフェースが外部クラス (またはそのサブクラス) 内での使用にのみ適している場合、それは理にかなっています。

于 2013-05-20T11:47:10.053 に答える