ある日のJavaキャスト論( @vvakame @r246 )

JAVAのキャストに関する会話。 ギャラリーによるメモです。
12
わかめ@毎日猫がいる @vvakame

キャストを明示的に行うコードを書くとか2週間に1回くらいですよね?ただしfindViewById、テメーはダメだ…!!Androidだと結構頻繁にキャストするハメになって苛立ちがマッハ。

2011-06-15 13:26:20
@R246 @R246

キャストって何がだめなのか教えてよ先生 RT @vvakame: キャストを明示的に行うコードを書くとか2週間に1回くらいですよね?ただしfindViewById、テメーはダメだ…!!Androidだと結構頻繁にキャストするハメになって苛立ちがマッハ。

2011-06-15 13:27:35
わかめ@毎日猫がいる @vvakame

@R246 実行するまでエラーになるかどうかわからないとこがイクナイ。

2011-06-15 13:28:26
@R246 @R246

@vvakame それはプログラマ側の問題じゃね?

2011-06-15 13:29:14
わかめ@毎日猫がいる @vvakame

呼び出し側ではキャストしないけど呼び出され側で自動キャストするようなライブラリコードをたまに書いて罪悪感に駆られたりはする。

2011-06-15 13:31:28
@R246 @R246

@vvakame あれ?キャストしてないからエラーになるけど、それがわかるのが実行しないと分からない ってことじゃなくて?

2011-06-15 13:34:30
わかめ@毎日猫がいる @vvakame

@R246 実行時にキャストした時にClassCastExceptionが発生する可能性があるのはバグの顕在化が遅いのでよくないです。毎回 instanceof でチェックするのはめどいです。なんで、Genericで制限を書けてコンパイラにチェックさせて楽するです。とか?

2011-06-15 13:36:05
@R246 @R246

@vvakame んーんー?ClassCastExceptionが発生する時ってプログラマの不注意だと思うんだけど、それを防ぐのがGenericとかの制限ってことでいい?それはそれとして、キャストがダメってのがよく分からないっす

2011-06-15 13:45:04
わかめ@毎日猫がいる @vvakame

@R246 そもそも"ClassCastExceptionが発生しないようにする"という努力が古臭い感じですね。Genericの制限を受け入れることで、コンパイルエラーという形でClassCastExceptionが自動で検知できるようになるので楽しようよ、っていう。

2011-06-15 13:47:12
わかめ@毎日猫がいる @vvakame

@R246 なんで、機械的にチェックできる例外をアプリに忍び込ませうる"キャスト"という操作は基本邪悪だよね。っていう立場です。Androidの場合キャストしないとどうにもならん局面が多すぎて生きてるのが辛い…。って感じです。

2011-06-15 13:48:00
@R246 @R246

@vvakame ふむぅ。ちなみにGeneric使わないでそういうことって出来るの?

2011-06-15 13:53:59
わかめ@毎日猫がいる @vvakame

@R246 一般的な労力では出来ないですね。Generic使わない限りコンパイラが検知してくれない(エラーにならない)ので、キャストが必要な所で毎回if( obj instanceof Hoge ) とかせにゃならんです。後は警告してくれるツール導入するとか…。

2011-06-15 13:56:19
@R246 @R246

@vvakame なるほど。さっきのAndroidだとキャストしなきゃいけないって局面みたいに、Genericじゃ解決できない場合はどうすべき?Javaバージョン下がるとか、言語がJavaじゃないとか

2011-06-15 14:01:45
わかめ@毎日猫がいる @vvakame

@R246 仕方ないからキャストします…(´ω`) か、自分でキャスト不要なライブラリ(ライブラリ内ではキャストしまくり)を作って、ライブラリがバグってなければ安全に使えるようにするか、とか。 まぁ僕の言い分は使う言語を自由に選べる場合の意見ですね。

2011-06-15 14:03:33
@R246 @R246

@vvakame ライブラリでキャストはOKなのか。納得した。

2011-06-15 14:10:33
わかめ@毎日猫がいる @vvakame

@R246 OKというか、自分がコード書くときにキャストするのはダサい。危ないし。っていう"これからやること"ベースの気持ちなので、十分にテストされたライブラリがキャストを隠蔽してくれるなら僕から見える世界ではキャストがないからそれでいいんだよあははは(゚∀゚)っていう感じっす。

2011-06-15 14:12:34