有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java创建匿名类的对象

我们有内部阶级

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

是否可以使用本地迭代器的所有功能创建一个匿名类,并使getIterator返回该匿名类的对象?主要问题是——应该用什么来代替

  return new LocalIterator();

共 (3) 个答案

  1. # 1 楼答案

    确保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;
                }
            };
        }
    }
    
  2. # 2 楼答案

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

    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实例

  3. # 3 楼答案

    您应该尝试一下这种设计模式:

    class OuterClass implements Iterable {
        ....
    
        public Iterator iterator() {
            return new Itr();
        } 
    
        private class Itr implements Iterator {
            ....
        }
    }
    
    1. 它不公开迭代器实现
    2. 该代码易于阅读和维护
    3. Itr实例可以作为公共Iterator在任何地方使用