Как я могу присвоить значение переменной int с необязательным? - PullRequest
0 голосов
/ 03 марта 2020

Например, у меня есть такой код:

class Point
{
    private String x;
    private String y;

    public String getX () { //Here can not use Optional<String>
        return this.x;
    }

    public String getY () {
        return this.y;
    }

    public Point(String x, String y) {
        this.x = x;
        this.y = y;
    }
}

...

    Point point = new Point(null, "14.2");

    if(ofNullable(point.getX().isPresent()) {
      this.xCoordinate = point.getX();
    }

    if(ofNullable(point.getY().isPresent()) {
      this.yCoordinate = point.getY();
    }

Я хочу сделать это более чистым способом, что-то вроде этого:

this.x = ofNullable(point.getX()).ifPresent((x) -> x)

Я знаю, что это не работает, но я попробовал почти все, но не могу заставить его работать.

1 Ответ

1 голос
/ 03 марта 2020

Вы должны использовать Integer вместо примитивного типа int

Вы не опубликовали достаточно кода, но ваше определение getX метода должно быть:

Optional<Integer> getX() вместо int getX().

Если вы не можете изменить класс с помощью метода, создайте класс-оболочку или что-то еще. Не видя весь код, я не могу сказать намного больше ...

РЕДАКТИРОВАТЬ:

Заставьте свой класс точек хранить дополнительные значения:

class Point
{
    private Optional<String> x;
    private Optional<String> y;

    public Optional<String> getX () { //Here can not use Optional<String>
        return this.x;
    }

    public Optional<String> getY () {
        return this.y;
    }

    public Point(String x, String y) {
        this.x = ofNullable(x);
        this.y = ofNullable(y);
    }
}

Тогда:

Point point = new Point(null, "14.2");

if(point.getX().isPresent()) {
  this.xCoordinate = point.getX();
}

if(point.getY().isPresent()) {
  this.yCoordinate = point.getY();
}
...