gpt4 book ai didi

java - 从 Java 继承泛型的问题

转载 作者:行者123 更新时间:2023-11-29 06:51:33 24 4
gpt4 key购买 nike

调用find方法时报错

interface Node<N extends Node<N>> {
void setNext(N next);
N getNext();
}

interface Entry<K, V> extends Node<Entry<K, V>> {
K getKey();
void setValue(V value);
V getValue();
}

class Test {
public static <N extends Node<N>> N find(N base, Object obj) {
for (N node = base; node != null; node = node.getNext())
if (node.equals(obj))
return node;
return null;
}

public static <K, V, E extends Entry<K, V>> E getEntry(E[] table, K key) {
return find(table[0], key);
}
}

绑定(bind)不匹配:类型 Test 的通用方法 find(N, Object) 不适用于参数 (E, K)。推断类型 E 不是有界参数的有效替代 >

我不知道为什么会这样。

最佳答案

问题出在这里:

interface Node<N extends Node<N>> {
void setNext(N next);
N getNext();
}
interface Entry<K, V> extends Node<Entry<K, V>> {
K getKey();
void setValue(V value);
V getValue();
}

你有 E extends Entry<E, V> .什么是E.getNext()返回?自 Entry<K, V> extends Node<Entry<K, V>> , E.getNext() 至少会返回Entry<K, V> ,这是肯定的。

但会不会是EEntry<K, V>.getNext()只保证返回 Entry<K, V> 的一些实例.但不能保证返回与 Entry<K, V> 完全相同的类型实际上是。强制代码中没有任何内容 E.getNext()返回 E , 只有 一些 实例赋值与 Entry<K, V> 兼容.

因此最好能为您推断出什么find方法是 Entry<K, V>这不一定与 E 兼容.

关于java - 从 Java 继承泛型的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46628725/

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