GWTのActivityMapperはLiskovの代替原則に違反していますか?
-
27-10-2019 - |
質問
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
マッピングすることです Place
に Activity
, 、マッピングのルールは完全に無料のままです。
そのような/他のカスケードのために作られるのは、Javaがサポートしていないということです 複数のディスパッチ, 、しかし、私の意見では、LSPに違反しているという意味ではありません(少なくとも、Javaには他に選択肢がないので、それは問題ではありません。訪問者パターンを使用できます。それは多くのことを変えません)。
所属していません StackOverflow