gpt4 book ai didi

java - 将类型转换添加到同一类型

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:37:29 25 4
gpt4 key购买 nike

我有一个外部类 DoublyLinkedList<T>和两个内部类 DoublyLinkedNode<T>以及DoublyLinkedListIterator<T> .它们的排列如下:

public class DoublyLinkedList<T> extends Collection<T> {

private DoublyLinkedNode<T> head;
private DoublyLinkedNode<T> tail;

public class DoublyLinkedNode<T> {

private DoublyLinkedNode<T> prev;
private DoublyLinkedNode<T> next;
T element;

}

public class DoublyLinkedListIterator<T> implements ListIterator<T> {

private DoublyLinkedNode<T> current = head;

}

}

自从我在 stackoverflow 和其他来源的多个页面上听说/读到迭代器应该在相应的可迭代类中实现,如 DoublyLinkedList<T> ,我认为这会更容易,因为您可以访问外部类字段。现在我想初始化 DoublyLinkedListIterator<T> 的一个实例,但 Eclipse 在这一点上说:

private DoublyLinkedNode<T> current = head;

DoublyLinkedListIterator<T>里面那:

Type mismatch: cannot convert from DoublyLinkedList.DoublyLinkedNode< T > to DoublyLinkedList.DoublyLinkedNode< T >

解决这个问题的唯一方法是再次使用相同的类型进行转换:

private DoublyLinkedNode<T> current = (DoublyLinkedNode<T>) head;

为什么会这样?

最佳答案

您已经声明了内部类 DoublyLinkedNodeDoublyLinkdListIterator。 内部类在范围内具有封闭类的所有泛型类型参数,因此 T 已经对它们可用。当您再次声明它们时,您将 T 隐藏在封闭类中。它们是不同的 T

删除隐藏外部 TT 的重新声明(并且您的类应该实现 Collection,这是一个接口(interface)) , 让你的内部类使用外部 T:

public class DoublyLinkedList<T> implements Collection<T> {

private DoublyLinkedNode head;
private DoublyLinkedNode tail;

public class DoublyLinkedNode {
private DoublyLinkedNode prev;
private DoublyLinkedNode next;
T element;
}

public class DoublyLinkedListIterator implements ListIterator<T> {
private DoublyLinkedNode current = head;
}
}

关于java - 将类型转换添加到同一类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47683632/

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