gpt4 book ai didi

Java:用类型方法覆盖泛型方法?

转载 作者:行者123 更新时间:2023-12-02 18:47:39 27 4
gpt4 key购买 nike

我有一个父类 EntryPoint,它具有一个抽象方法来检索作为泛型类型列表的 prop。该列表被声明为 protected :

public abstract class EntryPoint implements Serializable {

public EntryPoint(){}

protected ArrayList<? extends Tag> tiedTags;

public abstract ArrayList<? extends Tag> getTiedTags();

}

我有一个代表 SNMP 入口点的子类(用于查询 SNMP 代理)。 IntelliJ 并没有提示这个配置,但我想知道,我是否正确地覆盖了父级的 getTiedTags() 方法,或者我是否以某种方式覆盖了父级方法?

public class SNMPEntryPoint extends EntryPoint implements Serializable {

//Default Constructor for Serialization
public SNMPEntryPoint(){}

@Override
public ArrayList<SNMPTag> getTiedTags(){ return (ArrayList<SNMPTag>) tiedTags; }
}

最佳答案

您要重写的方法不是通用方法;泛型方法声明其自己的类型变量。

SNMPEntryPoint 中的覆盖是协变覆盖;子类可以重写父类(super class)中的方法,以返回比被重写方法中的返回类型更具体的类型(原始类型的子类型),例如:

interface Factory {
Object make();
}

class StringFactory implements Factory {
@Override
String make() { ... }
}

ArrayList<SNMPTag>ArrayList<? extends Tag> 的子类型,您的示例是有效的(尽管不常见)协变覆盖。

没有相应的功能来重写参数类型不太具体的方法。

关于Java:用类型方法覆盖泛型方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67220385/

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