假设我有一个返回某个父接口对象的 Java 方法。此函数返回的对象的类没有记录,但是有一个丰富且记录良好的接口层次结构,所有这些都扩展了父接口。例如:
public class Person {
public IMeal favoriteMeal() { ... }
}
public interface IBreakfast extends IMeal { ... }
public interface ILunch extends IMeal { ... }
public interface IBrunch extends IBreakfast, ILunch { ... }
如果我知道(并且对底层对象的稳定性有信心),我可以编写一个多方法来调度该方法返回的各种对象:
(defmulti place-setting class)
(defmethod place-setting Omelet [meal] ...)
但是,由于只有接口是公开的,我宁愿分发这些接口。有没有(好的)方法在接口上进行调度?也许像:
(defmulti place-setting magic-interface-dispatch-fn)
(defmethod place-setting IBreakfast [meal] ...)