Java / Android Studio - 协变返回类型 - "子类"中的方法与" baseclass"中的方法发生冲突:尝试使用不兼容的返回类型

时间:2015-02-05 12:24:50

标签: java android inheritance

我目前正在尝试在以下情况下应用协变返回类型(代码因相关性而被大量截断):

属性类:

  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变量声明为String,并在double / float / int / long的String表示中进行解析。然而,我发现这需要多余的铸造和类型检查,并寻求替代解决方案,但我仍然怀疑我的当前继承解决方案是否是最佳解决方案。

如果有人也可以分享他们对此事的见解,我会更加感激。

提前感谢您的任何努力,如果需要更多的书面代码我会编辑我的问题。

1 个答案:

答案 0 :(得分:2)

您不会返回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;
}