Не удается разрешить метод intValue () - PullRequest
0 голосов
/ 06 апреля 2020

Я пытаюсь создать метод 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();

Ответы [ 5 ]

3 голосов
/ 06 апреля 2020

Примитивы не имеют методов, и нет смысла создавать новый экземпляр Double только для того, чтобы немедленно снова развернуть его.

Вместо этого:

return (int) this.x;
1 голос
/ 06 апреля 2020

double и Double различны. double является примитивным типом, к нему не прикреплены методы. Double - это класс с прикрепленными методами. Для преобразования между ними используйте приведение типов.

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

Каждый тип примитива (int, float, char, et c.) Имеет класс оболочки . Обычно они имеют одинаковые имена, но с заглавной буквой. Компилятор часто автоматически между примитивом и оболочкой, но иногда мы должны помочь ему, явно приведя тип.

0 голосов
/ 06 апреля 2020

Ваша переменная temp объявлена ​​double, а не Double, а new Double(this.x) создает Double и распаковывает его в double. Вот почему компилятор жалуется на Unnecessary boxing....

. Вместо этого вы можете просто использовать return new Double(this.x).intValue();.

0 голосов
/ 06 апреля 2020

Это происходит потому, что вы присваиваете это примитиву типа double. Попробуйте это -

Double temp = new Double(this.x);
return temp.intValue();
0 голосов
/ 06 апреля 2020

Вы, похоже, храните темп в примитивном двойнике, но вам нужно использовать класс:

Double temp = new Double(this.x);

Кроме того, не используйте новый Double(...). Используйте Double.valueOf(...):

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