gpt4 book ai didi

java - 自动调用 iterator() 方法

转载 作者:行者123 更新时间:2023-12-01 19:36:09 24 4
gpt4 key购买 nike

我是 Collection java 的新手,如果问题如此基本,我很抱歉。

在调试Shipment类中的一段代码时。如果 iterator() 中的返回值为 null 则测试用例失败,但如果返回值为 products.iterator 则测试用例通过。因此,我认为在 ShipmentTest 类中运行 hasItem() 时会自动调用 iterator() 方法。但奇怪的是,它是在没有像普通代码一样从测试文件中调用的情况下调用的

Iterator itr = al.iterator();

while(itr.hasNext()) {
Object element = itr.next();
// do something....
}

并且hasItem()的返回类型不返回与迭代器相关的值...

有谁经历过这种情况,可以帮忙分享一下吗?

代码如下:

ShipmentTest 类

import org.junit.Test;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.core.IsCollectionContaining.hasItem;

public class ShipmentTest {

private Shipment shipment = new Shipment();
Product door = new Product("Door", 22);
Product windows = new Product("Windows", 10);

@Test
public void shouldAddItems() throws Exception {
shipment.add(door);
shipment.add(windows);

assertThat(shipment, hasItem(door));
}
}

运输类别

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class Shipment implements Iterable<Product> {

private static final int LIGHT_VAN_MAX_WEIGHT = 20;
private List<Product> products = new ArrayList<>();

@Override
public Iterator<Product> iterator() {
return products.iterator();
}

public void add(Product p) {
products.add(p);
}
}

产品类别

public class Product {

private final String name;
private final int weight;

public Product(String name, int weight) {
this.name = name;
this.weight = weight;
}

public String getName() {
return name;
}

public int getWeight() {
return weight;
}

@Override
public String toString() {
return "Product{" +
"name='" + name + '\'' +
", weight=" + weight +
'}';
}
}

最佳答案

是的,为了测试集合是否包含项目,IsCollectionContaining.hasItem 调用iterator()。这是处理任何 Iterable 时非常正常的部分。 (它还能如何判断货件是否包含特定元素?)

关于java - 自动调用 iterator() 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57465252/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com