Pessoal,
Gostaria de saber se tem como verificar o tipo de um primitivo em tempo de execução em java… sei que para a verificação do tipo de um objeto eu uso instanceof.
Abs.
Pessoal,
Gostaria de saber se tem como verificar o tipo de um primitivo em tempo de execução em java… sei que para a verificação do tipo de um objeto eu uso instanceof.
Abs.
Como assim? Tipos primitivos não tem super classes, onde você usaria uma coisa assim?
na verdade o que eu queria dizer era verificar o tipo de um array de primitivo.
Só um comentário.
Às vezes você precisa determinar o tipo de um membro ou o retorno de uma função via reflection.
Tais coisas podem ser realmente tipos primitivos.
O java.lang.Class referente a um membro de tipo primitivo int é int.class, não Integer.class (int != Integer).
Entretanto, você não pode misturar tipos primitivos e de referência em um java.util.List (por exemplo).
Isso é uma deficiência do Java (no C# não há essa confusão de tipos primitivos e de referência, apenas structs x classes - um tipo int, ou System.Integer, é uma struct, e quando copiada ou passada como parâmetro, é por cópia e não por referência. O tipo especial System.Object, ou object, não é nem uma struct nem uma classe - é as duas coisas.
A propósito, o tipo de um array de primitivos pode ser obtido assim - vou dar um exemplo daqui a pouco.
package guj;
public class ChecarArrayPrimitivos {
/**
* Checa se o componente de um tipo array é primitivo ou não.
* @param args
*/
public static void main(String[] args) {
int[] intArray = new int[0];
double[] doubleArray = new double[0];
Object[] objArray = new Object[0];
String[] strArray = new String[0];
System.out.println (intArray.getClass().getComponentType().isPrimitive()); // true
System.out.println (doubleArray.getClass().getComponentType().isPrimitive()); // true
System.out.println (objArray.getClass().getComponentType().isPrimitive()); // false
System.out.println (strArray.getClass().getComponentType().isPrimitive()); // false
// Note que, por deferência do Java, a seguinte conversão é possível:
objArray = strArray;
System.out.println (objArray.getClass().getComponentType().isPrimitive()); // false
System.out.println (objArray.getClass().getComponentType()); // class java.lang.String
// Se o array de primitivos estiver em uma variável do tipo Object, ele não perde sua
// identidade. Podemos comparar com o tipo primitivo[].class diretamente.
Object obj = doubleArray;
System.out.println (obj.getClass() == double[].class); // true
// Note que não é possível converter, mesmo com um cast, um tipo array de primitivos
// para outro tipo array de primitivos, ou para um tipo array de objetos.
// Portanto, a linha abaixo não compila se removermos o "//"
// doubleArray = (double[]) intArray;
}
}
Valeu pessoal,
Esclarecedor.
Abs