更优雅的编码器的编码方式

时间:2016-10-16 07:02:05

标签: java user-input setter

我想知道他们是否是一个更聪明,更优雅的编写二传手的方式,或者就此而言,任何必须检查用户输入是否正确的代码

这看起来很奇怪。我是新手,所以也许这只是解决这个问题的标准方法,但如果没有,我会很高兴知道“聪明”的方式是什么

public void setMonth(){
    boolean run = true;
    while(run){
        int input = scan.nextInt();
        if(input > 0 && input < 13){
            this.month = input;
            run = false;
        }
    }
}

4 个答案:

答案 0 :(得分:4)

首先,您可以像这样简化代码:

data Test.mydataset;
infile rawdata  FirstObs=2;
Input Hire_data date9. empid$ Job_code $  Salary : dollar8.;
run;

除此之外,我将其分为两个功能。 setter只应设置一个值。

 public void setMonth() {
    int input = 0;
    do {
       input = scan.nextInt();
    } while(input <= 0 || input >= 13)

    this.month = input;
 }

根据ChiefTwoPencils的建议,您还可以将setter提取到另一个类中。从而进一步分离用户输入和数据。

 public void setMonth(int month) {
    if(month > 0 && month <= 12) {
       this.month = month;
   } else {
        throw new IllegalArgumentException("Month has to be a value between 1 and 12 inclusively. Actual value was :" + month);
    }
 }

 public void readMonth() {
    int input = 0;
    do {
       input = scan.nextInt();
     } while(input <= 0 || input >= 13)

   setMonth(input);
 }

答案 1 :(得分:1)

setter和getter也称为mutators和accessors。

我的理解是这些方法只用于检索或修改对象的“状态”。它不应该具有业务逻辑,或者尽可能少的业务逻辑。

基本上有廉价的计算/业务逻辑。

让你的setter只设置'值'。

public void setMonth(int month){
    this.month = month
}

虽然基于输入检索值的方法可以在其他任何地方重用,我建议您可以创建一个实用程序类,并将其作为静态方法。

class DateUtil {
    public static int retrieveMonthBasedOnInput(){
    }
}

此类应具有从用户输入检索详细信息的业务逻辑,因此应在尝试设置该Bean实例的值时使用。

答案 2 :(得分:0)

该功能应该简单,只做一个工作。也许你可以像这样编码:

public void setMonth(int month) throws IllegalArgumentException {
    if(month<0 || month>11) throw new IllegalArgumentException("Month can only be set 0~11");
    this.month = month;
}

正如您所看到的,该函数只执行一个设置月份的事情。如果参数不正确,则抛出异常。

答案 3 :(得分:0)

写“好”的规则:

1)不要在setter中进行任何输入输出操作,如访问数据库,文件,网络,电子邮件发送,从命令行读取等...如果必须,请在调用setXXX之前或之后执行,最佳写作一些服务方法。

2)在setter中尽可能小的逻辑。可以像范围检查等那样进行参数验证......

3)Setter应该只做它设计的一件事(设定一个值),它不应该有任何副作用。