???????÷?Χ?????????????????л?????е?????switch??????????????????????????????????????е?????switch??????bug?????8thlight?????????????????????????
????????????? ????????????????????????????????????????
?????????????????д????????????????ж??switch??????á?
????public abstract class Bird {
????public abstract double getSpeed();
????protected double getLoadFactor() {
????return 3;
????}
????protected double getBaseSpeed() {
????return 10;
????}
????}
????public class EuropeanBird extends Bird {
????public double getSpeed() {
????return getBaseSpeed();
????}
????}
????public class AfricanBird extends Bird {
????public double getSpeed() {
????return getBaseSpeed() - getLoadFactor();
????}
????}
????public class NorwegianBird extends Bird {
????private boolean isNailed;
????public double getSpeed() {
????return isNailed ? 0 : getBaseSpeed();
????}
????}
??????3??NullObject/Optional
?????????? ????????????????????????????“?????null?????”??
????public void example() {
????sumOf(null);
????}
????private int sumOf(List numbers) {
????if(numbers == null) {
????return 0;
????}
????return numbers.stream().mapToInt(i -> i).sum();
????}
??????4???????????Inline statements????????
?????????? ??????????????????if???????
????public boolean horrible(boolean foo?? boolean bar?? boolean baz) {
????if (foo) {
????if (bar) {
????return true;
????}
????}
????if (baz) {
????return true;
????} else {
????return false;
????}
????}
???????? ???????????????????????????????????????????
???????÷?Χ???????в?????????????????????????????У???????????????
????????????? ??if?????????????????
????public boolean horrible(boolean foo?? boolean bar?? boolean baz) {
????return foo && bar || baz;
????}
??????5????????????
????????????????Щ?????????????????·?????????
????public class Repository {
????public String getRecord(int id) {
????return null; // cannot find the record
????}
????}
????public class Finder {
????public String displayRecord(Repository repository) {
????String record = repository.getRecord(123);
????if(record == null) {
????return "Not found";
????} else {
????return record;
????}
????}
????}
???????? ????if????????????????????????????????????а??????????——null???????????????????????????????н????Magic value??
???????÷?Χ???y?????if????????????????????????????????????????magic value?????
???????????????????????????????????Ruby??Hash#fetch??????????Java????????????????????????????????????????????
????private class Repository {
????public String getRecord(int id?? String defaultValue) {
????String result = Db.getRecord(id);
????if (result != null) {
????return result;
????}
????return defaultValue;
????}
????}
????public class Finder {
????public String displayRecord(Repository repository) {
????return repository.getRecord(123?? "Not found");
????}
????}
???????????
?????????Щ???????????????????а????????????????????????????????Щ???????????á????ò???????if?????????????????????????к??????????????????á?