gpt4 book ai didi

Java 泛型 : override method that differs in parameterized return type

转载 作者:行者123 更新时间:2023-12-03 22:24:28 25 4
gpt4 key购买 nike

我来自 .Net,我对 Java 开发还很陌生,所以这可能是一个奇怪的问题:

我有一个类层次结构,如:

Superclass implements GenericInterface<Superclass>
^
|
Subclass

在哪里 GenericInterface很简单:
public interface GenericInterface<T> {
OtherGenericInterface<T> getOther();
}

OtherGenericInterface最后使用类型参数:
public interface OtherGenericInterface<T> {
List<Object> processType(T left, T right);
}

现在,当我尝试实现 Superclass 中的接口(interface)时我只是返回一个匿名类型:
public class Superclass implements GenericInterface<Superclass> {
@Override
public OtherGenericInterface<Superclass> getOther() {
return new OtherGenericInterface<Superclass>() {
@Override
public List<Object> processType(T left, T right) {
...
}
};
}
}

到目前为止效果很好,但现在我尝试覆盖 Subclass 中的方法:
public class Subclass extends Superclass (implements GenericInterface<Subclass>) {
@Override
public OtherGenericInterface<Subclass> getOther() {
...
}
}

在那里,我不能用我更具体的返回类型覆盖该方法。即使我重新实现接口(interface)并将父类(super class)中的方法声明为 final 也是不可能的。

所以我的问题是:为什么不是 OtherInterface<MoreSpecificType>一个更具体的,或者至少是相同的类型(由于类型删除),因为这将是覆盖方法的要求,对吧?

最佳答案

这说明了一个对 Java 泛型的常见误解——认为一个类的匹配也会匹配子类(如参数的类型)。事实并非如此。 Java 泛型旨在确保类型匹配 正是 .如果你想要蠕动的空间,你必须指定并定义你想要的空间和多少。

这是一个版本,它允许您通过将签名准确指定为 <T extends Superclass> 来做您想做的事情。 .这可能不是您正在寻找的东西,但我希望它能为您指明正确的方向。

public interface OtherGenericInterface<T> {

List<Object> processType(T left, T right);
}

public interface GenericInterface<T> {

OtherGenericInterface<T> getOther();
}

public class Superclass<T extends Superclass> implements GenericInterface<T> {

@Override
public OtherGenericInterface<T> getOther() {
return new OtherGenericInterface<T>() {
@Override
public List<Object> processType(Superclass left, Superclass right) {
return null;
}
};
}
}

public class Subclass extends Superclass {

@Override
public OtherGenericInterface<Subclass> getOther() {
return null;
}
}

关于Java 泛型 : override method that differs in parameterized return type,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29140581/

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