Estoy accediendo a una instancia de MongoDB desde Java que está escrita en una aplicación de Rails. Estoy recuperando valores enteros que deben almacenarse en Long, porque pueden exceder los 32 bits.Error de conversión de tipo largo al leer el campo entero desde MongoDB en Java
Este código se compilará:
this.profile_uid = (Long)this.profile.get("uid");
Sin embargo, yo estoy haciendo una conversión de tipos de error en tiempo de ejecución:
Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Long
Esto es probablemente porque el campo es devuelto por Mongo como entero, pero sé que algunas ID's pueden venir como Longs y por diversas razones no puedo cambiar el tipo escrito en la base de datos (desde otra aplicación); puede ser de 32 bits en algunos casos y de 64 bits en otros.
La aplicación Java necesita manejar cualquiera de los dos, y no quiero tropezar con algún tipo de problema de truncamiento o desbordamiento. Quiero leerlo como Long en el lado de Java.
He intentado la solución a continuación y parece funcionar, pero no sé si estoy a salvo de problemas de truncamiento o desbordamiento de esta manera. No estoy seguro de qué es lo que hace la clase Number
en Java.
this.profile_uid = ((Number)this.profile.get("uid")).longValue();
¿Esto es legítimo? ¿Qué efectos secundarios tiene? ¿Hay otra/mejor manera?
puede verificar el tipo de valor devuelto usando ** instaceof ** y luego tomar la decisión correspondiente para la conversión tipo –