Java Reflection Learning <BR>A chamada reflexão pode ser entendida como a operação de obtenção de informações sobre o tipo de objeto durante a execução. Os métodos de programação tradicionais exigem que os programadores decidam os tipos a serem usados no estágio de compilação, mas com a ajuda da reflexão, os programadores podem obter essas informações dinamicamente e escrever códigos mais portáveis. A rigor, a reflexão não é uma característica de uma linguagem de programação, porque o mecanismo de reflexão pode ser implementado em qualquer linguagem, mas se a própria linguagem de programação suportar a reflexão, a implementação da reflexão será muito mais conveniente.
1. Obtenha a classe de tipo <BR>Sabemos que tudo em Java é um objeto, e os objetos que geralmente usamos herdam direta ou indiretamente da classe Object. A classe Object contém um método chamado getClass, que pode ser usado para obter a classe de tipo de uma instância. Uma classe de tipo refere-se a uma classe que representa um tipo, porque tudo é um objeto e os tipos não são exceção. Em Java, uma classe de tipo é usada para representar um tipo. Todas as classes de tipo são instâncias da classe Class. Por exemplo, aqui está o seguinte trecho de código:
Uma a = nova A();
if(a.getClass()==A.class)
System.out.println("igual");
senão System.out.println("desigual");
O resultado é impresso "igual".
Pode-se ver que o objeto a é uma instância de A, uma certa classe de A. O resultado retornado usando a.getClass() na instrução if é exatamente a classe de tipo de A. Para expressar um tipo específico de classe de tipo em Java, você pode usar o método "Type.class", pois a.getClass() obtém o tipo de classe de A, que é A.class, então o resultado da execução do código acima é imprimir "igual". Observação especial é que as classes de tipo têm uma correspondência um-para-um. A classe de tipo da classe pai e a classe de tipo da subclasse são diferentes. Portanto, assumindo que A é uma subclasse de B, o código a seguir obterá a saída de. "desigual":
Uma a = nova A();
if(a.getClass()==B.class)
System.out.println("igual");
senão System.out.println("desigual");
Portanto, se você conhece uma instância, pode obter a classe de tipo desse objeto usando o método "getClass ()" da instância e, se conhece um tipo, pode obter a classe de tipo desse tipo usando o método ".class" .
2. Obtenha informações de tipo <BR>Depois de obter a classe de tipo, você pode chamar alguns dos métodos para obter informações de tipo.
getName():String: obtém o nome completo do tipo.
getSuperClass():Class: Obtenha a classe pai direta deste tipo. Se o tipo não tiver classe pai direta, retorne nulo.
getInterfaces():Class[]: Obtenha todas as interfaces implementadas por este tipo.
isArray():boolean: Determine se o tipo é um array.
isEnum():boolean: Determine se o tipo é um tipo de enumeração.
isInterface():boolean: Determine se o tipo é uma interface.
isPrimitive():boolean: Determina se o tipo é básico, ou seja, se é int, boolean, double, etc.
isAssignableFrom(Class cls):boolean: Determine se este tipo é a classe pai (ancestral) ou a interface pai (ancestral) do tipo cls.
getComponentType():Class: Se o tipo for um array, retorna o tipo de componente do array.
Além disso, operações como conversão de tipo também podem ser realizadas. Os principais métodos são:
asSubclass(Class clazz):Class: Altere este tipo