创建匿名类的对象

时间:2016-03-21 08:14:55

标签: java oop

我们有内在的课程

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();

3 个答案:

答案 0 :(得分:3)

我不确定我是否理解你的问题。但是如果你想使用匿名类,你可以这样做:

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访问类中的this参数和外部类的OuterClass.this实例。

答案 1 :(得分:2)

您应该尝试使用此设计模式:

class OuterClass implements Iterable {
    ....

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

    private class Itr implements Iterator {
        ....
    }
}
  1. 它没有公开迭代器实现
  2. 很容易阅读和维护此代码
  3. Itr个实例可以作为常见的Iterator
  4. 在任何地方使用

答案 2 :(得分:0)

确保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;
            }
        };
    }
}