¿cómo usar Class en Java?
todo lo que sabemos es » todas las instancias de una clase any comparten el mismo java.lang.Objeto de clase de ese tipo de clase «
Por ejemplo)
Student a = new Student();Student b = new Student();
entonces a.getClass() == b.getClass()
es verdadero.
ahora asume
Teacher t = new Teacher();
sin genéricos lo siguiente es posible.
Class studentClassRef = t.getClass();
pero esto está mal ahora ..?
por ejemplo) public void printStudentClassInfo(Class studentClassRef) {}
se puede llamar con Teacher.class
esto se puede evitar usando genéricos.,
Class<Student> studentClassRef = t.getClass(); //Compilation error.
¿Ahora Qué es T ?? T es parámetros de tipo (también llamados variables de tipo); delimitado por corchetes angulares (<>), sigue el nombre de la clase.
T es solo un símbolo, como un nombre de variable (puede ser cualquier nombre) declarado durante la escritura del archivo de clase. Más tarde que T será sustituido por
Nombre de clase válido durante la inicialización (HashMap<String> map = new HashMap<String>();
)
por ejemplo) class name<T1, T2, ..., Tn>
así que Class<T>
representa un objeto de clase de tipo de clase específico ‘T
«.,
asuma que sus métodos de clase tienen que trabajar con parámetros de tipo desconocidos como a continuación
Aquí T se puede usar como String
type as CarName
O T se puede usar como Integer
type as modelNumber,
O T se puede usar como Object
escriba como instancia de coche válida.
Ahora aquí lo anterior es el POJO simple que se puede usar de manera diferente en tiempo de ejecución.
Collections e. g) List, Set, Hashmap son los mejores ejemplos que funcionarán con diferentes objetos según la declaración de T, pero una vez que declaramos T como String
e.,g) HashMap<String> map = new HashMap<String>();
entonces solo aceptará objetos de instancia de clase String.
Métodos Genéricos
Genérico métodos son métodos que introducen sus propios parámetros de tipo. Esto es similar a declarar un tipo genérico, pero el ámbito del parámetro type está limitado al método donde se declara. Se Permiten métodos genéricos estáticos y no estáticos, así como constructores de clases genéricos.
la sintaxis para un método genérico incluye un parámetro de tipo, dentro de corchetes angulares, y aparece antes del tipo de retorno del método., Para métodos genéricos, la sección parámetro Tipo debe aparecer antes del tipo de retorno del método.
aquí <K, V, Z, Y>
es la declaración de los tipos utilizados en los argumentos del método que deben antes del tipo devuelto que es boolean
aquí.
en la parte inferior; la declaración de tipo <T>
no es necesaria a nivel de método, ya que ya está declarada a nivel de clase.
class MyClass<T> { private T myMethod(T a){ return a; }}
pero a continuación es incorrecto ya que los parámetros de tipo de nivel de clase K, V, Z E Y no se pueden usar en un contexto estático (método estático aquí).,
otros escenarios válidos son
y finalmente el método estático siempre necesita una declaración explícita <T>
; no derivará del nivel de clase Class<T>
. Esto se debe a que el nivel de clase T está vinculado con la instancia.
también lee restricciones sobre genéricos
comodines y subtipos
argumento de Tipo para un método genérico