Tag: 的责任链

避免Java中的instanceof

有一个“instanceof”操作链被认为是“代码味道”。 标准答案是“使用多态”。 在这种情况下我会怎么做? 有许多基类的子类; 没有一个在我的控制之下。 Java类Integer,Double,BigDecimal等类似的情况 if (obj instanceof Integer) {NumberStuff.handle((Integer)obj);} else if (obj instanceof BigDecimal) {BigDecimalStuff.handle((BigDecimal)obj);} else if (obj instanceof Double) {DoubleStuff.handle((Double)obj);} 我确实可以控制NumberStuff等等。 我不想在几行代码中使用多行代码。 (有时我做一个HashMap映射Integer.class到一个IntegerStuff的实例,BigDecimal.class到一个BigDecimalStuff的实例等等。但是今天我想要更简单一些。) 我想要这样简单的事情: public static handle(Integer num) { … } public static handle(BigDecimal num) { … } 但是Java不能这样工作。 我想在格式化时使用静态方法。 我格式化的东西是复合的,其中Thing1可以包含一个Thing2s数组,Thing2可以包含Thing1s数组。 当我执行这样的格式化程序时遇到问题: class Thing1Formatter { private static Thing2Formatter thing2Formatter = new Thing2Formatter(); […]