質問

GWTアプリケーションには、次のようなクラスがあります。

public class AppActivityMapper implements ActivityMapper {

    @Override public Activity getActivity(Place place) {

        if(place instanceof ThisPlace) {
            return new ThisActivity((ThisPlace)place);
        }
        if(place instanceof ThatPlace) {
            return new ThatActivity((ThatPlace)place);
        }
        if(place instanceof AnotherPlace) {
            return new AnotherActivity((AnotherPlace)place);
        }
        // you get the idea
    }
}

ActivityMapper、Activity、およびPlaceオブジェクトはフレームワークの一部であり、インターフェイスは、これが使用される方法であることを意味します。

ただし、によると リスコフ代替原則, 、タイプを受け入れるが、サブクラスのタイプチェックを行う方法は、どのアクションをとるべきかを推測することは原則の違反です。

GWTのActivityMapperインターフェイスは、本質的にLSPの違反を奨励していますか?または、私が考えていないその方法をコーディングする別のLSP準拠の方法はありますか?

役に立ちましたか?

解決

の役割 ActivityMapper マッピングすることです PlaceActivity, 、マッピングのルールは完全に無料のままです。
そのような/他のカスケードのために作られるのは、Javaがサポートしていないということです 複数のディスパッチ, 、しかし、私の意見では、LSPに違反しているという意味ではありません(少なくとも、Javaには他に選択肢がないので、それは問題ではありません。訪問者パターンを使用できます。それは多くのことを変えません)。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top