【问题标题】:Cannot resolve method 'intValue()'无法解析方法“intValue()”
【发布时间】:2020-04-06 16:27:20
【问题描述】:

我正在尝试为私有双变量创建 get 方法。

当我写作时

public class {

  private double x = 4.12;

  public int get(){
    double temp = new Double(this.x);
    return temp.intValue();
  }

}

IDE 建议删除 Double Unnecessary boxing 'new Double(this.x)',但它不识别 intValue() 方法。写的时候也是这样:

return this.x.intValue();

【问题讨论】:

  • 我建议将返回和转换类型更改为长。因为 double 可能持有一个大于 int 类型大小的数字。

标签: java int double


【解决方案1】:

基元没有方法,创建Double 的新实例只是为了立即再次打开它是没有意义的。

改为:

return (int) this.x;

【讨论】:

    【解决方案2】:

    doubleDouble 是不同的。 double 是一个原始类型,它没有附加任何方法。 Double 是附加了方法的类。要在它们之间进行转换,请使用类型转换。

    public int get(){
        return  ((Double) x).intValue();
    }
    

    每个原始类型(intfloatchar 等)都有一个包装类。它们通常具有相同的名称,但首字母大写。编译器通常会自动在原语和包装器之间进行转换,但有时我们必须通过显式类型转换来帮助它。

    【讨论】:

    • 好吧,我的错。已编辑!
    【解决方案3】:

    您似乎将 temp 存储在原始双精度中,但您需要使用该类:

    Double temp = new Double(this.x);
    

    另外,不要使用新的Double(...)。使用Double.valueOf(...):

    Double temp = Double.valueOf(this.x);
    

    【讨论】:

    • 如果你真的需要Double(你不需要)更简洁的方法是Double temp = this.x;
    • @AndyTurner 如果 OP 有理由将其存储为 Double 并且为了简单起见而没有显示其余代码怎么办?
    • “猜猜 OP 是什么意思”是一个狂野无限深的兔子洞。最好只坚持实际显示的内容。
    【解决方案4】:

    发生这种情况是因为您将其分配给原始双精度类型。 试试这个 -

    Double temp = new Double(this.x);
    return temp.intValue();
    

    【讨论】:

      【解决方案5】:

      您的变量temp 被声明为double 而不是Double 并且new Double(this.x) 创建一个Double 并将其拆箱为double。这就是编译器抱怨Unnecessary boxing... 的原因。

      您可以简单地使用 return new Double(this.x).intValue();

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-15
      • 2015-06-10
      • 2019-08-28
      • 2019-10-10
      • 2019-06-13
      • 2017-11-13
      相关资源
      最近更新 更多