2016-03-21 13 views
3

を作成すると、ローカルイテレータのすべての機能を匿名クラスを作成し、その匿名クラスのgetIteratorリターンオブジェクトを作成することは可能ですか?主な問題はある - 代わりに我々は</p> <pre><code>class OuterClass { public Iterator getIterator(final String name) { class LocalIterator implements Iterator { public Iterator next() { return new LocalIterator(); } } return new LocalIterator(); } } </code></pre> <p>内部クラスを持っている匿名クラスのオブジェクト

return new LocalIterator(); 
+0

他の 'Iterator'(再帰的)を返す' Iterator'を本当に返したいですか? – Spotted

+1

return新しいIterator(){....あなたのコードはここ....}; – Rustam

答えて

2

でどうあるべきかあなたはこのデザインパターンを試して与える必要があります:読みやすいイテレータの実装

  • を公開していません

    class OuterClass implements Iterable { 
        .... 
    
        public Iterator iterator() { 
         return new Itr(); 
        } 
    
        private class Itr implements Iterator { 
         .... 
        } 
    } 
    
    1. をこのコードをそのまま使用することができます
    2. Itrインスタンスはどこでも共通して使用できますIterator
  • +0

    なぜupvotes?この回答は**匿名のクラスについての質問には合いません**。 – Nier

    0

    foreachループで使用できるように、OuterClassIterableを実装していることを確認してください。次にiterator()で、匿名イテレータのインスタンスを返すことができます(Tを必要な具体的な型に置き換えます)。

    public class OuterClass<T> implements Iterable<T> { 
    
        @Override 
        public Iterator<T> iterator() { 
         return new Iterator<T>() { 
    
          @Override 
          public boolean hasNext() { 
           // TODO Auto-generated method stub 
           return false; 
          } 
    
          @Override 
          public T next() { 
           // TODO Auto-generated method stub 
           return null; 
          } 
         }; 
        } 
    } 
    
    4

    あなたの質問が正しく理解されているかどうかわかりません。あなたが行うことができます匿名クラスを使用する場合でも、一般に

    class OuterClass { 
    
        public Iterator<Object> getIterator(final String name) { 
         return new Iterator<Object>() { 
    
          @Override 
          public boolean hasNext() { 
           // validate if there is a next object 
           return false; 
          } 
    
          @Override 
          public Object next() { 
           // get the next object and return it, throw an exception if there is no next object 
           return null; 
          } 
         }; 
        } 
    } 
    

    を、あなたは常に匿名クラス(例えば、http://docstore.mik.ua/orelly/java-ent/jnut/ch03_12.htmを参照)を使用して、任意のインターフェイスのインスタンスを作成することができます。クラス内のnameパラメータ、およびOuterClass.thisを使用して外部クラスのthisインスタンスにアクセスすることもできます。

    関連する問題

     関連する問題