[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[jfriends] Re: [jfriends] abstractクラスの方が有効な場合




前橋です。

Shin さん:
>最初はそんなものなのかなって思ってましたが、これってinterfaceを継承
>すればいいだけじゃないです?って上のメモに既に書いてありますが、
>LayoutManager2なりの拡張された新しいinterfaceを用意するほうが正しい
>というか.

ええと、その場合、たとえば setLayoutメソッドの引数は、いつま
でたっても LayoutManagerなのですよね?

LayoutManager2を引数にすると、LayoutManagerを使っている古い
アプリケーションは、再コンパイルも通りませんから。

新しいアプリケーションではLayoutManager2をimplementsしたクラ
スを作って、それをsetLayoutに渡すのでしょう。この時、引数に
対して上向きのキャストが入りますけど、これは問題ないです。

でも、LayoutManagerを提供するクラスライブラリ側では、それを
受けた後でダウンキャストすることになりますよね? 新しい機能を
使うなら、そうせざるを得ない筈です。

古いアプリケーションは、まだLayoutManagerを渡してくるでしょ
うから、何も考えずにダウンキャストすると例外でコケますね。

もちろん、新しい機能を呼ぶ前に、いちいちinstanceofで確認して、
「ああ、こいつはまだ古いインタフェースを使ってるんだなあ」と
解釈してダウンキャストをやめる、というのは、それはそれで筋な
ような気はしますが...

クラスライブラリ側で、いつまでも古いインタフェースを基準にし
て、適宜チェックしてはダウンキャストということになると、コー
ドの信頼性に支障が出そうな気もします。

------------------------------------------------------------
  前橋 和弥                             maebashi@xxxxxxxxxx
  中部ソフトエンジニアリング(株)
    〒450 名古屋市中村区名駅4-10-25(名駅IMAIビル 5F)
    Tel:(052)583-4511(代) 内線 252 Fax:(052)583-4566
------------------------------------------------------------