gpt4 book ai didi

java - 有人可以解释这个 "cannot be converted"Java 泛型错误吗?

转载 作者:行者123 更新时间:2023-12-02 13:14:13 25 4
gpt4 key购买 nike

我遇到了一个编译错误,这让我有点困惑。它说:

TTTree<K,V>无法转换为TTTree<K,V> 在下面标记的代码行处。

public abstract class TTTree<K extends Comparable<K>, V> {

public abstract TTTree<K, V> put(K k, V v);

private static <K extends Comparable<K>, V> TTTree<K, V> leaf(K k, V v) { return null; }

private static class Leaf<K extends Comparable<K>, V> extends TTTree<K, V> {

private final K k = null;
private final V v = null;

@Override
public TTTree<K, V> put(K ik, V iv) {
TTTree<K, V> newLeaf = leaf(ik, iv);
return node(newLeaf, k, this); // <---- !!!! ERROR !!!!
}
};

private TTTree<K, V> node(TTTree<K, V> l, K k, TTTree<K, V> r) {
return null;
}
}

看起来这应该可行,那么为什么编译器不喜欢它呢?我能做些什么来修复这个错误(我想我可以将所有内容转换为原始类型,但这有点太激烈了)。

PS:示例代码减少到“最低限度”,但仍然产生错误。

PS2:使用 Java 8 编译器进行编译。

最佳答案

public abstract class TTTree<K extends Comparable<K>, V> {

public abstract TTTree<K, V> put(K k, V v);

private static <K extends Comparable<K>, V> TTTree<K, V> leaf(K k, V v) { return null; }

private static class Leaf<K extends Comparable<K>, V> extends TTTree<K, V> {

private final K k = null;
private final V v = null;

@Override
public TTTree<K, V> put(K ik, V iv) {
TTTree<K, V> newLeaf = leaf(ik, iv);
return node(newLeaf, k, this); // <---- !!!! ERROR !!!!
}
};

private static <K extends Comparable<K>,V> TTTree<K, V> node(TTTree<K, V> l, K k, TTTree<K, V> r) {
return null;
}
}

Leaf 是一个嵌套静态类。它对 TTTree 及其泛型类型一无所知。另外,Leaf::put 方法调用 TTTree::node 方法,该方法不是静态的,但属于某个 TTTree 实例。当您调用 Leaf::put 时,没有指向您调用节点方法的 TTTree 实例的链接。因此 TTTree::node 方法应该是静态的。最后一件事:由于 TTTree::node 是静态的,因此您应该声明与 Leaf 类中使用的相同的类型边界

关于java - 有人可以解释这个 "cannot be converted"Java 泛型错误吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37366733/

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