Как увеличить экземпляр с помощью сеттера? - PullRequest
0 голосов
/ 04 сентября 2018

У меня небольшая проблема в простом классе.

import java.util.Random;

public class fileTest {

    private static Random rand = new Random();;
    private int randOne = rand.nextInt(10);
    private String strOne = String.format("%02d", this.randOne);

    public int getRandOne() {
        return randOne;
    }

    public void setRandOne(int randOne) {
        this.randOne = randOne +1;
    }

    public String getStrOne() {
        return strOne;
    }

}

Мой "лаунчер"

public class launch {
    public static void main(String[] args) {


        fileTest fileA = new fileTest();
        System.out.println(fileA.getStrOne());

        //FunctionDoMyStuff...

        fileA.setRandOne(fileA.getRandOne());

        System.out.println(fileA.getRandOne());
        //RandOne is increment

        System.out.println(fileA.getStrOne());
        //StrOne is not

    }
}

Моя идея - создать случайное число и преобразовать его в строку. После окончания работы мне нужно увеличить строку.

Но результат после сеттера такой же, как и в начале. Я думаю, что я не все понимаю о геттере / сеттере.

Может ли кто-нибудь помочь мне понять мою ошибку?

1 Ответ

0 голосов
/ 04 сентября 2018

Это происходит один раз во время создания вашего экземпляра:

private String strOne = String.format("%02d", this.randOne);

Он не запускается автоматически после изменения randOne. Решение состоит в том, чтобы полностью удалить поле strOne и создать строку внутри геттера:

public String getStrOne() {
    return String.format("%02d", this.randOne);
}

Вам не нужно хранить динамически полученное значение.


Поведение вашего метода setRandOne не соответствует тому, что люди могут разумно ожидать от метода set. Метод, который делает то, что делает ваш, может быть описан как setRandOneToOneHigherThan(int value). Или вы можете назвать это incrementRandOne(), но тогда тело должно сделать this.randOne = this.randOne + 1; (или this.randOne++;). Или вы можете сделать это обычным установщиком и делать приращение, пока вы вызываете метод: fileA.setRandOne(fileA.getRandOne() + 1);.

...