Necesito obtener el valor de un campo usando la reflexión. Sucede que no siempre estoy seguro de cuál es el tipo de datos del campo. Para eso, y para evitar cierta duplicación de código, he creado el siguiente método:
@SuppressWarnings("unchecked")
private static <T> T getValueByReflection(VarInfo var, Class<?> classUnderTest, Object runtimeInstance) throws Throwable {
Field f = classUnderTest.getDeclaredField(processFieldName(var));
f.setAccessible(true);
T value = (T) f.get(runtimeInstance);
return value;
}
Y usa este método como:
Long value1 = getValueByReflection(inv.var1(), classUnderTest, runtimeInstance);
o
Double[] value2 = getValueByReflection(inv.var2(), classUnderTest, runtimeInstance);
El problema es que parece que no puedo enviar Integera Long:
java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Long
¿Existe una mejor manera de lograrlo?
Estoy usando Java 1.6.
java
reflection
casting
Tiago Veloso
fuente
fuente

Number[]y un bucle sobre él para crear una matriz debidamente escrita, ¿verdad?double[]por ejemplo, pero podría trabajar para unaDouble[].Number. O, para decirlo de otra manera: los que regla de conversión cree usted que no le permite convertir de uno a otro?Simplemente:
fuente
intvalores.Integertointy luego lo conviertelongantes de pasar alLong(long)constructor ahora obsoleto .Esto evita el impacto en el rendimiento de la conversión a String. El
longValue()método en Integer es solo una conversión del valor int. ElLong.valueOf()método le da a la máquina virtual la oportunidad de usar un valor en caché.fuente
Por extraño que parezca, descubrí que si analiza desde una cadena, funciona.
Ganar.
fuente
Conversión de entero a largo Muy simple y muchas formas de convertir ese
Ejemplo 1
Ejemplo 2
Ejemplo 3
Ejemplo 4
Si ya ha escrito el int como un entero, puede hacer esto:
fuente
Convierta un número entero directamente en largo agregando 'L' al final de Integer.
fuente
Si el entero no es nulo
ise encasillará automáticamente en along.Usar en
valueOflugar denewpermite el almacenamiento en caché de este valor (si es pequeño) por parte del compilador o JVM, lo que resulta en un código más rápido.fuente
fuente
Si sabe que Integer no es NULL, simplemente puede hacer esto:
fuente
o
fuente
En
intlalongclase se incluye un analizador de variables al tipoInteger. Aquí hay un ejemplo:Puede usar fácilmente esta función incorporada para crear un método que analiza desde
inthastalong:fuente
Esto es seguro para nulos
fuente
Si no conoce la clase exacta de su número ( Integer , Long , Double , lo que sea), puede lanzar a Number y obtener su valor largo:
fuente
En el caso de una Lista de tipo Long, agregando L al final de cada valor entero
fuente
Intenta convertirValue por Jackson
fuente