Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 让二传手回球是个好习惯吗? 例如,考虑以下两个设置: bool setMonth(int month) { bool valid = false; if (month > 0 && month < 12) { this->month = month; valid = true; } return valid; } bool setMonth(整数月){ bool valid=false; 如果(月>0和月月=月; 有效=真; } 返回有效; }_Java_C++ - Fatal编程技术网

Java 让二传手回球是个好习惯吗? 例如,考虑以下两个设置: bool setMonth(int month) { bool valid = false; if (month > 0 && month < 12) { this->month = month; valid = true; } return valid; } bool setMonth(整数月){ bool valid=false; 如果(月>0和月月=月; 有效=真; } 返回有效; }

Java 让二传手回球是个好习惯吗? 例如,考虑以下两个设置: bool setMonth(int month) { bool valid = false; if (month > 0 && month < 12) { this->month = month; valid = true; } return valid; } bool setMonth(整数月){ bool valid=false; 如果(月>0和月月=月; 有效=真; } 返回有效; },java,c++,Java,C++,对 void setMonth(int month) { if (month > 0 && month < 12) { this->month = month; } } void setMonth(整数月){ 如果(月>0和月月=月; } } 第一种方法让类的客户机明确地知道集合是否失败。这被认为是好的做法吗?我不这么认为。这意味着无论何时设置,都必须检查操作是否成功。 出于可读性和逻辑性考虑,我认为提出一个例外是一个更好的主意。 我

void setMonth(int month) {
   if (month > 0 && month < 12) {
      this->month = month;
   }
}
void setMonth(整数月){
如果(月>0和月<12){
本->月=月;
}
}

第一种方法让类的客户机明确地知道集合是否失败。这被认为是好的做法吗?

我不这么认为。这意味着无论何时设置,都必须检查操作是否成功。
出于可读性和逻辑性考虑,我认为提出一个例外是一个更好的主意。
我发现:

/*program stuff*/
try{
    YourObject.setMonth(0);
    /* other stuff*/
}catch YourException{
/* recovery*/
}
是指:

/*program stuff*/
if(!YourObject.setMonth(0)){
    /*recovery*/
}else{
    /*stuff*/
}

在逻辑(我会说哲学)和可读性方面。

如果是java(您标记了两种语言),那么最佳实践是从setter返回void。如果设置值失败,则引发异常。对于您的情况,您应该抛出month setter的
IllegalArgumentException

当您想要跟踪插入到setter中的无效数据时,最好在setter中使用异常。在这种情况下,方法的签名为:

//throw exception when month is out of range 
    void setMonth(int month) throws InvalidMonthNumberException;
如果您想在月份超出范围时设置默认数据,请在javadoc中对此进行说明

/*
* If month < 1 or month > 12 default month (1) accepted
*/
void setMonth(int month);
/*
*如果月份<1或月份>12,则接受默认月份(1)
*/
无效设置月(整数月);

有人可能会说,使用
布尔值作为返回类型并没有坏处。在最坏的情况下,你只是忽略检查

另一种观点可能认为抛出异常更优雅,信息也更丰富(比如Java的
IllegalArgumentException
或Python的
ValueError
),但这可能会导致更多的“麻烦”,因为异常必须以某种方式从客户端代码中处理

如果需要确保插入的值绝对正确,第三种方法是将允许的值封装在类、枚举或名称空间等结构实体中。
Java中的一个例子是:

public void setMonth(Month month){
    this.month = month;     // member month is now of type Month
}


public enum Month{

    JANUARY(1),
    FEBRUARY(2),
    MARCH(3),
    APRIL(4),
    MAY(5),
    JUNE(6),
    JULY(7),
    AUGUST(8),
    SEPTEMBER(9),
    OCTOBER(10),
    NOVEMBER(11),
    DECEMBER(12)


    private int n;
    private Month(int n){
        this.n = n;
    }
}
someObject.setMonth(Month.FEBRUARY);
使用的方法是:

public void setMonth(Month month){
    this.month = month;     // member month is now of type Month
}


public enum Month{

    JANUARY(1),
    FEBRUARY(2),
    MARCH(3),
    APRIL(4),
    MAY(5),
    JUNE(6),
    JULY(7),
    AUGUST(8),
    SEPTEMBER(9),
    OCTOBER(10),
    NOVEMBER(11),
    DECEMBER(12)


    private int n;
    private Month(int n){
        this.n = n;
    }
}
someObject.setMonth(Month.FEBRUARY);

(你可以在C++中使用命名空间实现同样的事情)

是否有一个好的做法是设置SETER?请只使用你实际编程语言的语言标记。它是一个设置者的无习惯用法,所以没有人会去寻找/期待。Imo抛出IllegalArgumentException会更好。请选择一种语言。如果回答时需要两种语言的专业知识,则只标记两种语言。答案为否,返回
bool
是一个糟糕的主意。最好的答案是为月份创建一个用户定义的类型(类),它不能有不正确的值。下一个最好的方法是断言或异常。我不认为它更干净,但它肯定更有用,因为
异常
对象可以为您提供有关该问题的信息,甚至在需要时传递其他数据。它还显示了错误处理的意图,而不是普通的控制流分支。是的,
Exception
对象可以提供很多有用的信息!