0

I came across this bit of code to remove strings of even length from given Linked list I don't understand why the iterator object itr not instantiated with new keyword. here is the code..

public static void removeEvenLength(List<String> list) {
     Iterator<String> itr= list.iterator();
     while (itr.hasNext()) {
         String element=itr.next();
         if (element.length()%2==0) {
             i.remove();
     }
   }
}       

Does it mean here, that the iterator method is static and it just returns a new iterable object with list as its field. can someone provide with me one or more examples where similar way of instantiating is encountered in Java other than singleton constructors I suppose. Thank you

4

3 回答 3

9

这是否意味着迭代器方法是静态的,它只是返回一个以列表作为其字段的新可迭代对象。

不,这是一个实例方法。它只是返回一个对Iterator<String>. 所以iterator()方法的主体很可能包含一个new语句(尽管它可能反过来调用其他东西)。现在让我们把它从迭代器和泛型中拿走——类似的情况是:

class Bar {}

class Foo {
    Bar createBar() {
        return new Bar();
    }
}

public class Test {
    public static void main(String[] args) {
        Foo foo = new Foo();
        Bar bar = foo.createBar();
    }
}

相同模式:返回不同类型的新实例的实例方法。

于 2013-07-18T21:31:05.703 回答
1

并非每个对象都是使用关键字显式创建的。new一个方法可以在内部创建一个新对象,对它做一些事情,然后返回它。

取决于类型List的迭代器通常是一个私有内部类,Itr在 ArrayList 中调用。它在iterator(. 例如ArrayList,该方法如下所示:

public Iterator<E> iterator() {
    return new Itr();
}

其他实现的类List可以使用不同的私有内部类,也可以在某些(通常是非 jre)实现中使用匿名类。

于 2013-07-18T21:32:08.940 回答
1

它不是用 new 运算符实例化的,因为list.iterator它不是一个类型,而是一个返回在方法内实例化的对象的方法。它只是分配给该方法的返回值。

于 2013-07-18T21:32:12.727 回答