如何使用setter增加实例?

时间:2018-09-04 20:01:24

标签: java getter-setter

我在一个简单的课上有一个小问题。

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

    }
}

我的想法是创建一个随机数并将其转换为字符串。 完成我的工作之后,我需要增加字符串。

但是,setter之后的结果与开始时相同。我想我不了解有关吸气剂/吸气剂的所有知识。

有人可以帮助我理解我的错误吗?

1 个答案:

答案 0 :(得分:4)

这种情况在创建实例时发生一次:

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

更改randOne后,它不会自动再次运行。解决方案是完全删除strOne字段并在getter中构造String:

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);时进行递增。