私はいくつかの親インターフェイスのオブジェクトを返すJavaメソッドがあります。この関数が返すオブジェクトのクラスは文書化されていませんが、親インタフェースを拡張している豊富で十分に文書化されたインタフェースの階層があります。だから、例えば:私は知っていた(との安定性に自信があった)基礎となるオブジェクト場合JavaインターフェイスでClojure Multimethodディスパッチ
public class Person {
public IMeal favoriteMeal() { ... }
}
public interface IBreakfast extends IMeal { ... }
public interface ILunch extends IMeal { ... }
public interface IBrunch extends IBreakfast, ILunch { ... }
、私はそのメソッドによって返されたさまざまなオブジェクトにディスパッチするmultimethodを書くことができ:
(defmulti place-setting class)
(defmethod place-setting Omelet [meal] ...)
しかし、インターフェイスだけが公開されているので、私はむしろそれらをディスパッチしたいと思います。インターフェイスにディスパッチする(良い)方法はありますか?おそらくのように:
(defmulti place-setting magic-interface-dispatch-fn)
(defmethod place-setting IBreakfast [meal] ...)
Welp、今私は馬鹿のように感じる。 'isa? 'の部分を説明してくれてありがとう。それが私が見逃していた面でした。 – user12341234