Verificação array de primitivos [Resolvido]

5 respostas
orobsonpires

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.

5 Respostas

ViniGodoy

Como assim? Tipos primitivos não tem super classes, onde você usaria uma coisa assim?

orobsonpires

na verdade o que eu queria dizer era verificar o tipo de um array de primitivo.

E

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.

E

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;
    }

}
orobsonpires

Valeu pessoal,

Esclarecedor.

Abs

Criado 4 de julho de 2012
Ultima resposta 4 de jul. de 2012
Respostas 5
Participantes 3