gpt4 book ai didi

扩展时 Java 泛型名称冲突

转载 作者:行者123 更新时间:2023-11-30 09:51:53 25 4
gpt4 key购买 nike

我是泛型的新手,如果能为我解决以下问题提供任何帮助,我将不胜感激:

我有这个父类:

public class Parent<K, V> {
public void f(K key,V value){}
}

然后我有这个子类:

public class Child<K,V> extends Parent<K,LinkedList<V>> {
@Override
public void f(K key,V value) {}
}

嗯,希望是Child.f会覆盖 Parent.f ,但不幸的是,编译器不喜欢这里发生的事情并给了我:

Name clash: The method f(K, V) of type Child<K,V> has the same erasure as f(K, V) of type
Parent<K,V> but does not override it

我以前在不同的上下文中看到过这个错误,但我不确定为什么会出现在这个特定的上下文中。有什么办法可以避免吗?

提前致谢。

最佳答案

您使用 V 表示两种不同的含义。在 child 中将 V 重命名为 W 它应该如下所示。这里父级中的 V 是 LinkedList

public class Child<K,W> extends Parent<K,LinkedList<W>> {
@Override
public void f(K key,LinkedList<W> value) {}
}

顺便说一句:它真的必须是一个具体的类LinkedList吗,它不能是List吗。

编辑:您可能混淆了在特定情况下您需要的内容与您想要定义为通用定义的内容。例如

public class Child<K,V> extends Parent<K,V> {
@Override
public void f(K key, V value) {}
}

Child<String, LinkedList<String>> child = new Child<String, LinkedList<String>>();
child.f("key", new LinkedList<String>());

这里您有一个 child ,您已将其定义为使用 LinkedList,但并非所有 child 都必须使用 LinkedList。

关于扩展时 Java 泛型名称冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4465602/

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