gpt4 book ai didi

java - java中子类的泛型

转载 作者:行者123 更新时间:2023-11-29 04:52:25 26 4
gpt4 key购买 nike

我有以下代码片段,其中我实现了 Bag 容器,并且 Bag 类实现了 Iterable 接口(interface)。

public class ResizingArrayBag<Item> implements Iterable<Item> {
//Some bag methods
private class ListIterator<Item> implements Iterator<Item> {
//ListIterator methods
}
}

ItemListIterator<Item>类不同于 ItemResizeingArrayBag<Item>

为什么我们要声明IterableIteratorItem并且是 Item这些不同于ListIterator<Item>ResizingArrayBag<Item>

最佳答案

Is the Item in ListIterator<Item> class different from Item in ResizeingArrayBag<Item>?

是的。这称为类型参数隐藏,不鼓励这样做,因为它会导致严重的困惑。例如,可以提供以下声明:

 ResizingArrayBag<A>.ListIterator<B> x = new ResizingArrayBag<A>().ListIterator<B>();

哪里AB是一些不同的真实类型。

如果ListIterator应该包含与封闭的 ResizeingArrayBag 相同的元素输入,然后你必须做:

public class ResizingArrayBag<Item> implements Iterable<Item> {
//Some bag methods
private class ListIterator implements Iterator<Item> {
//ListIterator methods
}
}

注意这里我们没有重新定义 Item类型参数,而是重用已经为 ResizingArrayBag 定义的参数.

另一个经验法则是你应该用单个大写字母命名你的类型参数。 Item可能会产生误导,特别是如果某处有某种特定类型,称为 Item , 存在。

因此,不要将类型参数命名为 Item喜欢这样的东西:

public class ResizingArrayBag<T> implements Iterable<T> {

private class ListIterator implements Iterator<T> {

}
}

Why do we have declare Iterable and Iterator with Item and are the Items in these different from ListIterator<Item> and ResizingArrayBag<Item>?

实现 Iterable将强制您实现 .iterator()方法,您必须在其中返回 Iterator实现。

关于java - java中子类的泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34921318/

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