gpt4 book ai didi

java - 类型不匹配 : cannot convert MyClass to MyClass

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:50:32 24 4
gpt4 key购买 nike

关于泛型和/或内部类,我缺少一些东西。我想写一个专门的树类,有一个专门的迭代器。 FooTree 类如何有一个迭代器返回类型 FooTree 的连续节点而不是类型 V 的节点值?类(class)开始:

public class FooTree<V>
private final V value;
private FooTree<V> left;
private FooTree<V> right;

我将 Iterator 类设为内部类,因为没有其他人会关心它。 FooTree中定义的获取迭代器的工厂方法是:

public Iterator<FooTree<V>> preorderIterator() {
return this.new PreorderIterator<FooTree<V>>;
}

由于 next() 必须返回一个 V,如接口(interface)中声明的那样,我添加了 nextNode() 来绕过返回类型。内部类开始:

private class PreorderIterator<V> implements Iterator<V> {
private FooTree<V> current;
. . .
public FooTree<V> nextNode() {
current = FooTree.this; **

我得到了这个奇妙的编译器错误:
Type mismatch: cannot convert from ...FooTree<V> to ...FooTree<V> (两者是同一个包)
嗯什么!?
我可以通过添加强制转换使其编译:current = (FooTree)FooTree.this;但是为什么我首先必须这样做呢?它是否试图变得“聪明”并计算出第一个 V 可能与第二个 V 不同?

正确的做法是什么?

最佳答案

尝试做出声明:

private class PreorderIterator implements Iterator<V>

<V>在你的内部类中是不必要的,在这种情况下,没有帮助。

实际发生的是 <V>PreorderIterator<V>正在“隐藏”<V>来自您的外部类,因此尽管它们看起来像是相同类型的参数,但实际上它们是恰好具有相同名称的不同参数。

关于java - 类型不匹配 : cannot convert MyClass<E> to MyClass<E>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15941265/

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