Railsアプリから書き込まれたJavaからMongoDBインスタンスにアクセスしています。32ビットを超える可能性があるため、Longに格納する必要がある整数値を取得しています。
このコードはコンパイルされます:
this.profile_uid = (Long)this.profile.get("uid");
ただし、型変換の実行時エラーが発生します。
Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Long
これはおそらく、フィールドがMongoによって整数として返されるためですが、一部のIDはLongとして返される可能性があり、さまざまな理由で、(別のアプリから)DBに書き込まれるタイプを変更できません。32ビットの場合もあれば64ビットの場合もあります。
Javaアプリはどちらかを処理する必要があり、ある種の切り捨てやオーバーフローの問題に遭遇したくありません。Java側ではLongとして読みたいです。
以下の回避策を試しましたが、実行されているようですが、この方法で切り捨てやオーバーフローの問題から安全かどうかはわかりません。Number
Javaのクラスが何をするのかわかりません。
this.profile_uid = ((Number)this.profile.get("uid")).longValue();
これは合法ですか?どのような副作用がありますか?別の/より良い方法はありますか?