Java/Android Studio - 协变返回类型 - "subclass"中的方法与 "baseclass": attempting to use incompatible return type 中的方法冲突

标签 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 目前出现以下错误:

“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/

相关文章:

java - 如果用户未登录struts2,如何防止加载任何页面

java - 当 JDialog 可见时执行 SQL 语句?

android - AlertDialog 样式和颜色

javascript - 在sails.js Controller 中调用 super 方法

java - 用于删除 Java 项目中不必要的依赖项的工具

java - 通过与数据库中的用户详细信息进行比较来进行用户登录

android - 如何在 gradle 中添加 Android 归档的传递依赖

android - 使用 WakeLock 保持流播放

javascript - 如何使用 Dojo 扩展 es6 类

python - Python 继承的问题