Предложите варианты улучшения кода Java

114
10 ноября 2019, 02:20

Appl класс использует объекты класса Square. Приминить технику "инкапсуляции полей" к полям в Square класса и измените существующий код. Пожалуйста предложите другие решения для улучшения качества кода

Такая задача мне попалось на собеседовании Такой код может удовлетворить интервьюера?

public class Square { 
    private double x, y; 
    private double width; 
 
    public double getX() { 
        return x; 
    } 
 
    public void setX(double x) { 
        this.x = x; 
    } 
 
    public double getY() { 
        return y; 
    } 
 
    public void setY(double y) { 
        this.y = y; 
    } 
 
    public double getWidth() { 
        return width; 
    } 
 
    public void setWidth(double width) { 
        this.width = width; 
    } 
 
    public Square() { 
    } 
 
    public Square(double x, double y, double width) { 
        this.x = x; 
        this.y = y; 
        this.width = width; 
    } 
 
    public double getPerimetr() { 
        return 4*width; 
    } 
} 
 
 
 
public class Appl { 
    public void work() { 
        Square square = new Square(); 
        square.setX(2); 
        square.setY(3); 
    } 
}

Answer 1

Геттеры и Сеттеры не дают автоматически инкапсуляции. Хотя почему-то многие так считают. Скорее даже наличие сеттеров говорит о отсутствии инкапсуляции. И по дефолту надо делать неизменяемые объекты. Мутабельные надо делать лишь при конкретной необходимости (но лучше и в этом случае еще раз подумать). И вообще, геттеры и сеттеры - это не обязанность, а только спецификация по JavaBeans. Ее совсем не обязательно всюду запихивать где надо и не надо.
Вот как можно написать проще:

public class Square {
    private final double x, y;
    private final double width;
    public Square(double x, double y, double width) {
        this.x = x;
        this.y = y;
        this.width = width;
    }
    public double x() {
        return x;
    }
    public double y() {
        return y;
    }
    public double width() {
        return width;
    }
    public double perimetr() {
        return 4*width;
    }
} 
public class Appl {
    public void work() {
        Square square = new Square(2, 3, 42);
    }
}
READ ALSO
Не работает метод getSupportFragmentManager()

Не работает метод getSupportFragmentManager()

Я хочу реализовать Recycler View, в котором по нажатии на item будет появляться фрагментНо я у меня не работает метод getSupportFragmentManager(), я пытался подставлять...

175
Обратиться к функции другого класса

Обратиться к функции другого класса

Простите, как я могу обратиться к методу getName из активности NavigationActivity?

210
Оптимизируем кода на JAVA

Оптимизируем кода на JAVA

Задача состоит в следующем:

100
Как задать несколько условий для if else Jquery

Как задать несколько условий для if else Jquery

Есть код, который отвечает за отправку формы на сайте:

129