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 Integer
a 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
int
valores.Integer
toint
y luego lo conviertelong
antes 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
i
se encasillará automáticamente en along
.Usar en
valueOf
lugar denew
permite 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
int
lalong
clase 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
int
hastalong
: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