.Class

4 respostas
Renato.Pinheiro

Oi Pessoal,

a pergunta deve ser tão simples, que vou até usar um . . .

[STUPID MOD ON]

Apesar de já ter lido alguns livros e ter feito um curso sobre Java, não esbarrei com nenhuma explicação sobre a utilização do .CLASS, por exemplo, em um post aqui do fórum achei a seguinte instrução:

private Banco b;
data = b.select(Funcionario.class);

ou, em um exemplo sobre DAO que um amigo do RIOJUG enviou:

ClienteDAO dao = factory.getDao( ClienteDAO.class);

O que acontece nestas instruções? O que é “buscado” no .class?

[/STUPID MOD OFF]

Bom, pesquisei na net e no fórum mas, em uma busca por .CLASS, tive milhares de respostas e nenhuma sobre esta sintaxe.

Valeu a força . . . :wink:

4 Respostas

T

A palavra-chave “class” é usada, em Java, para duas coisas:
a) Para iniciar uma definição de classe. Exemplo:

public class Exemplo {
...

b) Para obter o objeto java.lang.Class que representa os dados de uma classe, a partir do nome dessa classe. Exemplo:

Class classeDaJavaLangString = String.class;
System.out.println (classeDaJavaLangString.getName()); // imprime "java.lang.String"

Você está pensando agora: por que é que não uso “Class getClass()”, que é um método de java.lang.Object? É que quando eu tenho apenas o nome de uma classe, não um objeto dessa classe, não tenho como chamar getClass. E é por isso que se usa “.class”.

T

Eu sei que todo mundo lhe manda procurar no Google, mas certas coisas o dr. Google da Silva Telles Paranhos não consegue achar no mar da Internet (não se esqueça que, por mais inteligência que o pessoal do Google tenha posto no buscador - e é por isso que pus esse nome complicado nele - , nem sempre o buscador acha o que você tenta encontrar. )

Certas coisas você tem de procurar em alguns lugares padrão, como a Java Language Specification ou o Java Tutorial. Infelizmente é assim.

Renato.Pinheiro

Thingol,

entendi o que explicou no seu primeiro post, a ficha ainda não caiu para utilização nos dois exemplos que citei. Vou ler o material dos dois links que você passou e qualquer coisa ligo o stupid mode denovo :wink:

Renato.Pinheiro

Continuo lendo sobre :slight_smile:

Um exemplo que ajudou bastante foi esse ai abaixo, enviado pelo Peter Lupo da lista RioJUG.

public class ClasseExemplo {

    public static void main(String[] args) {
        System.out.println(ClasseExemplo.class.getCanonicalName());
        System.out.println(ClasseExemplo.class.getClass().getCanonicalName());
       
        System.out.println(Class.class.getCanonicalName());
        System.out.println(Class.class.getClass().getCanonicalName());
       
        exemplo1(ClasseExemplo.class);
//        exemplo1(new ClasseExemplo()); Erro de compilação
        exemplo2(new ClasseExemplo().getClass());
        exemplo2(Class.class);
        exemplo3(Class.class);
        exemplo3(Class.class.getClass());
       
        Class<Class<Class<?>>> expressaoValida;
        Class<? extends Class> expressaoValida2;
        Class<? extends Class<?>> expressaoValida3;
    }
   
    public static void exemplo1(Class<ClasseExemplo> exemplo) {
        System.out.println(exemplo.getCanonicalName());
        System.out.println(exemplo.getClass().getCanonicalName());
    }
   
    public static void exemplo2(Class<?> exemplo) {
        System.out.println(exemplo.getCanonicalName());
        System.out.println(exemplo.getClass().getCanonicalName());
    }
   
    public static void exemplo3(Class<? extends Class> exemplo) {
        System.out.println(exemplo.getCanonicalName());
        System.out.println(exemplo.getClass().getCanonicalName());
    }
}
Criado 6 de fevereiro de 2008
Ultima resposta 8 de fev. de 2008
Respostas 4
Participantes 2