3

イテレータは、クライアントにエクスポートされるネストされたクラスです。では、 public ではなく private が宣言されているのはなぜですか? 例えば:

private abstract class HashIterator<E> implements Iterator<E> {

 private final class EntryIterator extends HashIterator<Map.Entry<K,V>> {
        public Map.Entry<K,V> next() {
            return nextEntry();
        }
    }
4

3 に答える 3

3

It hides implementation details which class users dont need to know. Eg HashSet

public Iterator<E> iterator() 

Returns an iterator over the elements in this set. 

it does not say which concrete Iterator is returned, it is a private class invisible for users, users dont need to know implementation details and HashSet designers are free to change the implementation without notice

于 2013-09-04T04:31:48.133 に答える
0

それには多くの理由と注意事項があります。

  • クラスを維持privateすると、クライアントは実際の実装に依存できなくなります
  • コードを疎結合に保つ
  • 実際の実装にキャストできないため、厳密にコードをに適用します。interfaceprivate
  • classは にのみ有用でparent classあり、他のコードはそれに依存すべきではないことを論理的に強調しています。
  • 実際の実装は、他の回答で既に述べたように、Java チームからの通知なしにいつでも変更される可能性があります。
于 2013-09-04T06:03:31.877 に答える