簡體   English   中英

創建匿名類的對象

[英]Create object of anonymous class

我們有內心階級

class OuterClass
{
  public Iterator getIterator(final String name)
  {
    class LocalIterator implements Iterator
    {
        public Iterator next()
        {
            return new LocalIterator();
        }
    }
    return new LocalIterator();
 }
}

是否可以使用Local iterator的所有功能創建一個匿名類,並使g​​etIterator返回該匿名類的對象? 主要問題是 - 應該是什么而不是

  return new LocalIterator();

我不確定我是否正確理解你的問題。 但是如果你想使用匿名類,你可以這樣做:

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 )。 您還可以使用OuterClass.this訪問類中的name參數和外部類的this實例。

你應該試試這個設計模式:

class OuterClass implements Iterable {
    ....

    public Iterator iterator() {
        return new Itr();
    } 

    private class Itr implements Iterator {
        ....
    }
}
  1. 它不公開迭代器實現
  2. 它易於閱讀和維護此代碼
  3. Itr實例可以在任何地方用作常見的Iterator

確保OuterClass實現Iterable以便與foreach循環一起使用。 然后在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;
            }
        };
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM