【发布时间】:2015-04-05 07:19:39
【问题描述】:
我目前正在尝试在以下情况下应用协变返回类型(代码因相关性而被大量截断):
属性类:
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 当前给我以下错误:
'getValue() in "attributes.DoubleAttribute" clashes with 'getValue()' in 'attributes.Attribute'; attempting to use incompatible return type.
我目前对自己做错了什么感到茫然。我在 Google 上寻找的每个协变返回类型示例都告诉我这应该可以工作,因为 double 类是 Number 的子类。
如果有人能帮助我指出为什么 Android Studio 告诉我这是不允许的,我将不胜感激。
顺便说一句,我并不完全确定我所采取的方法是否正确。我目前正在测量可以是String 类型、double 类型、long 类型或int 类型的属性,然后将它们存储在 SQLite 表中。起初,我将value 变量声明为一个字符串,并且只是解析为一个双精度/浮点数/整数/长整数的字符串表示形式。然而,我发现这需要大量的强制转换和类型检查,并寻求替代解决方案,但我仍然怀疑我当前的继承解决方案是否是最佳解决方案。
如果有人也能分享他们对此事的见解,我将更加感激。
提前感谢您的任何努力,如果需要更多书面代码,我将编辑我的问题。
【问题讨论】:
标签: java android inheritance