Java/Android Studio - 协变 Return 类型 - "subclass" 中的方法与 "baseclass" 中的方法冲突:尝试使用不兼容的 return 类型

Java/Android Studio - Covariant Return Type - Method in "subclass" clashes with method in "baseclass": attempting to use incompatible return type

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

属性class:

  public abstract class Attribute
    {
         protected Number value;
         public Attribute(Number initialValue)  
         {     this.value = initialValue;}

         public abstract Number getValue();
    }

双属性class:

  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 不允许我将子 class DoubleAttribute 的 return 类型从 Number 更改为 double.

Android Studio 当前出现以下错误:

'getValue() in "attributes.DoubleAttribute" clashes with 'getValue()' in 'attributes.Attribute'; attempting to use incompatible return type.

我目前不知道自己做错了什么。我在 Google 上寻找的每个协变 return 类型示例都告诉我这应该有效,因为 double class 是 [= 的子 class 18=].

如果有人能帮助我指出为什么 Android Studio 告诉我这是不允许的,我将不胜感激。

附带说明一下,我不完全确定我采用的方法是否正确。我目前正在测量 String 类型、double 类型、long 类型或 int 类型的属性,然后将它们存储在 SQLite table 中。起初我将 value 变量声明为一个字符串,并在 double/float/int/long 的字符串表示中进行了解析。然而,我发现这需要大量的过度转换和类型检查并寻求替代解决方案,但我仍然怀疑我当前的继承解决方案是否是最佳解决方案。

如果哪位大神也能分享一下对这件事的见解,我将不胜感激。

在此先感谢您的努力,如果需要更多的书面代码,我会编辑我的问题。

你没有return一个Doubleclass。你 return 一个原始的替身。原始类型不能是对象的子class。

public double getValue() //The error shows on 'double'
{
    return this.value.doubleValue();
}

更改为(大写 D)

public Double getValue() //The error shows on 'double'
{
     return this.value;
}