我目前正在尝试在以下情况下应用协变返回类型(代码因相关性而被大量截断):
属性类:
public abstract class Attribute
{
protected Number value;
public Attribute(Number initialValue)
{ this.value = initialValue;}
public abstract Number getValue();
}
DoubleAttribute 类:
public class DoubleAttribute extends Attribute
{
public DoubleAttribute(double initialValue)
{ super(initialValue);}
@Override
public double getValue() //The error shows on 'double'
{ return this.value.doubleValue();}
}
遗憾的是,Android Studio 不允许我将子类 DoubleAttribute
的返回类型从 Number
更改为 double
。
Android Studio 目前出现以下错误:
“attributes.DoubleAttribute”中的“getValue()”与“attributes.Attribute”中的“getValue()”冲突;尝试使用不兼容的返回类型。
我目前不知道自己做错了什么。我在 Google 上找到的每个协变返回类型示例都告诉我这应该可行,因为 double
类是 Number
的子类。
如果有人可以帮助我指出为什么 Android Studio 告诉我这是不允许的,我将非常感激。
顺便说一句,我并不完全确定我所采取的方法是否正确。我当前正在测量的属性可以是 String
类型、double
类型、long
类型或 int
类型,并且随后将它们存储在 SQLite 表中。首先,我将 value
变量声明为字符串,并以 double/float/int/long 的字符串表示形式进行解析。然而,我发现这需要大量的转换和类型检查,并寻求替代解决方案,但我仍然怀疑我当前的继承解决方案是否是最佳解决方案。
如果有人也能分享他们对此事的见解,我将更加感激。
提前感谢您所做的一切努力,如果需要更多书面代码,我将编辑我的问题。
最佳答案
您不会返回Double
类。您返回一个原始 double 值。原始类型不能是对象的子类。
public double getValue() //The error shows on 'double'
{
return this.value.doubleValue();
}
更改为(大写 D)
public Double getValue() //The error shows on 'double'
{
return this.value;
}
关于Java/Android Studio - 协变返回类型 - "subclass"中的方法与 "baseclass": attempting to use incompatible return type 中的方法冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28343916/