java重构if else

use*_*985 0 java if-statement coding-efficiency

我有这个if else代码,我想知道是否有更多有用/智能的方式来编写它:

public void saveContent() throws Exception {
   if(book.isColored()) {
      book.setChoosen(“1234”);
   } else if (book.isAvailable()) {
      book.setChosen(“23498”);
   } else if (book.isAdults()) {
      book.setChosen(“0562”);
   } else {
      ReaderResponse response = reader.getReaderResponse();
      if (response != null) {
         book.setChosen(response.getName());
         }
      } else {
            book.setChosen(“4587”);
      }
   }
}
Run Code Online (Sandbox Code Playgroud)

该方法返回void.

Tom*_*ine 6

在中间引入局部变量会导致问题.解决这个问题的一种方法是引入另一种方法 - 不要害怕小方法.

public void saveContent() throws Exception {
    book.setChoosen(
        book.isColored()   ? “1234"  :
        book.isAvailable() ? “23498” :
        book.isAdults()    ? “0562”  :
        readerResponse()
    );
}
private String readerResponse() throws Exception {
    ReaderResponse response = reader.getReaderResponse();
    return response == null ? “4587” : response.getName();
}
Run Code Online (Sandbox Code Playgroud)

? : 是条件运算符,通常称为三元运算符.

如果getReaderResponse没有副作用,您可以重复通话.get方法通常没有副作用,但我觉得这个人可能会这样做.我不确定Exception抛出的位置 - 我认为这是用于替换子类型.