@kzk_mover なるほど。strに@MessagePackOptionalアノテーションを付けるとどうでしょう?
2010-11-08 03:08:47unpack時にnullを許可しない(MessageTypeExceptionになる)ので、pack時も基本的にnullは許可しない方針だけど、これはJava的にアリなのかナシなのか…。
2010-11-08 03:11:35@nobu_k そうなんですよね…。言語仕様的にはオブジェクトは全部nullableなので、非常に厄介です。ここは逆にrequredを指定する方がいいのか…それもどうか…
2010-11-08 03:18:04参照型の場合はデフォルトでoptionalフィールドになって、nullを弾きたいときは明示的にMessagePackRequredアノテーションを付ける案はどうか。プリミティブ型は逆で、デフォルトはrequired。
2010-11-08 03:19:41全部デフォルトでoptionalというのは新しいな…! プリミティブ型もoptional。何か問題あるかな。
2010-11-08 03:25:02@frsyuki プリミティブ型にユーザが値を入れたのかどうか(値がデフォルト値の場合)って、Javaだと何か良い判断方法あるのかなw でもそれができたらものすごく嬉しいよね><
2010-11-08 03:28:56@nobu_k 判断方法…無さそうですねw 例えばintのデフォルト値には0を入れたくなりそうですが、言語のデフォルト値も0なので、区別しようがない…。
2010-11-08 03:29:52String key; みたいなフィールドを書く人は、ここにnullが入らないことを期待するケースが多いのか、むしろ自分でnullをチェックするコードを書くケースが多いのか。
2010-11-08 03:35:51デフォルト値orユーザ指定の値判別問題むずかしい。gflagsとかもカッチリ使おうとしたときにそこが難点なんだよね。特にboolだと2値しかないので、FLAGS_***がデフォルト値なのか、ユーザが明示的に指定したのか判別できなかったり。
2010-11-08 03:36:47そういう意味ではJavaのStringとかはnullableなのでoptional的に扱えるけど、プリミティブ型にnullが無いので、プリミティブ型とそうじゃない型で扱いが異なりすぎてウザイ!!
2010-11-08 03:38:27boolean を使わずに Boolean を使っていたら true, false, null の3値にしたいんだなーという雰囲気がするけど、では String はどうなのか。int a = 0; とか。
2010-11-08 03:39:04C++だったらoptional<T>でおk!で済むけどJavaの文化が良くわからんのですがどうするんでしょうね。プリミティブ型使わずにIntegerとかのみに対応しますで良いのかな?
2010-11-08 03:40:02C++ならデフォルトでrequiredで、省略可能にしたいなら optional<T> にするに違いないので、Java版でもデフォルトはrequiredで、省略可能にしたいなら MessagePackOptional を付ける方針がウマいと最初は思ったけど、実際どうだろか…
2010-11-08 03:42:48Javaはプリミティブ型以外の全部の参照型は optional<T> に相当するので、参照型はデフォルトでoptional、プリミティブ型はrequiredだ、という発想もなきにしもあらず。
2010-11-08 03:44:53参照型途プリミティブ型で挙動が全然違うのも困るから、この際全部optionalだ、というのも悪くはない気がする。ぁぁもうワカラン…
2010-11-08 03:45:53これはかなりアリな気がする! RT @frsyuki: Javaはプリミティブ型以外の全部の参照型は optional<T> に相当するので、参照型はデフォルトでoptional、プリミティブ型はrequiredだ、という発想もなきにしもあらず。
2010-11-08 03:46:03