Articles

como usar a classe em Java?

tudo o que sabemos é que “todas as instâncias de uma classe compartilham o mesmo java.idioma.Classe objeto do tipo da classe”

e.g)

Student a = new Student();Student b = new Student();

Então a.getClass() == b.getClass() for verdadeira.

assume agora

Teacher t = new Teacher();

sem genéricos o abaixo é possível.

Class studentClassRef = t.getClass();

mas isto está errado agora ..?

e.g) public void printStudentClassInfo(Class studentClassRef) {} pode ser chamado com Teacher.class

Isto pode ser evitado usando genéricos.,

Class<Student> studentClassRef = t.getClass(); //Compilation error.

Now what is T ?? T is type parameters( also called type variables); delimited by angle brackets (<>), follows the class name.
T é apenas um símbolo, como um nome variável (pode ser qualquer nome) declarado durante a escrita do arquivo de classe. Mais tarde será substituído por
nome de Classe válido durante a inicialização (HashMap<String> map = new HashMap<String>();)

e.g) class name<T1, T2, ..., Tn>

Então Class<T> representa um objeto de classe de classe específico do tipo ‘T‘.,

Suponha que sua classe de métodos para trabalhar com o desconhecido tipo de parâmetros, como abaixo

Aqui T pode ser usado como String tipo CarName

OU T pode ser usado como Integer tipo modelNumber,

OU T pode ser usado como Object tipo como válido carro instância.

agora aqui o acima é o POJO simples que pode ser usado de forma diferente no tempo de execução.
coleções por exemplo) Lista, conjunto, Hashmap são os melhores exemplos que irão funcionar com diferentes objetos de acordo com a declaração de T, mas uma vez que declaramos T como String
E.,g) HashMap<String> map = new HashMap<String>(); então ele só aceitará objetos de instância de classe String.

métodos genéricos

métodos genéricos são métodos que introduzem os seus próprios parâmetros de tipo. Isto é semelhante a declarar um tipo genérico, mas o escopo do parâmetro do tipo é limitado ao método onde ele é declarado. São permitidos métodos genéricos estáticos e não estáticos, bem como construtores genéricos de classes.

a sintaxe para um método genérico inclui um parâmetro de tipo, dentro de parêntesis de ângulo, e aparece antes do tipo de retorno do método., Para os métodos genéricos, a secção do parâmetro do tipo deve aparecer antes do tipo de retorno do método.

aqui <K, V, Z, Y>é a declaração dos tipos utilizados nos argumentos do método que deve antes do tipo de retorno que éboolean aqui.

no ponto abaixo; a declaração de tipo <T> não é exigida ao nível do método, uma vez que já é declarada ao nível da classe.

class MyClass<T> { private T myMethod(T a){ return a; }}

mas abaixo está errado porque os parâmetros do tipo de classe K, V, Z e Y não podem ser usados num contexto estático (método estático aqui).,

outros cenários válidos são

E, por fim, o método estático necessita sempre de uma declaração explícita

; não será obtido a partir do nível de classe Class<T>. Isto é por causa do nível de classe T é vinculado com instância.

também ler restrições sobre genéricos

Wildcards e Subtipagem

argumento do tipo para um método genérico