Java - Class
Definición
-
Clase genéricase utiliza para representar laclasede untipo de objeto- Representa una clase de un tipo particular
T
- Representa una clase de un tipo particular
-
Clasecontiene información sobre eltipo de objetoque representa- Como
nombre,estructuraymétodos
- Como
-
La
clase Class<T>se utiliza para obtener información sobre untipo de objetoentiempo de ejecución-
Permitea los desarrolladorescrear códigoque secomportedemanera diferentedependiendo deltipo de objetocon el que se esté trabajando -
Un objeto
Classrepresenta la definición de la clase
-
Ejemplo
-
Supongamos que tenemos una clase
Personque representa a unapersona- La
clase Persontiene los siguientesatributosde clase
- La
class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return this.name;
}
public int getAge() {
return this.age;
}
}
-
Supongamos que queremos crear un
métodoqueimprimaelnombrey laedadde unapersonaen la terminal- Podríamos
crearunmétodoque tome unobjeto Personcomoargumentoy lo imprima en la terminal de la siguiente manera
- Podríamos
public void printPerson(Person p) {
System.out.println("Name: " + p.getName());
System.out.println("Age: " + p.getAge());
}
-
Si queremos que este
métodopuedaimprimirlainformacióndecualquier tipo de objetono solo deobjetosde laclase Person- Podemos utilizar la
clase Class<T>para hacer que elmétodosea “genérico” ypueda trabajarcon cualquiertipo de objeto
- Podemos utilizar la
-
Para hacer esto
-
Debemos cambiar la
signatura/cabecera/firmadelmétodopara que acepte unargumentode tipoClass<T>en lugar de unobjeto Person- La nueva
signatura/cabecera/firmadel método quedaría así
- La nueva
-
public static <T> void printObject(Object obj) {
// El cuerpo del método se implementará más adelante
}
-
Ahora que tenemos la
signatura/cabecera/firmadel método- Debemos
implementarelcuerpo del método
- Debemos
-
En el
cuerpo del métodopodemos utilizar laclase Class<T>para obtener información sobre eltipo de objetoque se está pasando comoargumento- Luego utilizar esa información para
imprimirlosatributosdelobjetoen laterminal
- Luego utilizar esa información para
-
Para hacer esto debemos utilizar el
método getDeclaredFields()de laclase Class<T>para obtener unalistade losatributosdel objeto- Podemos
iterarsobre estalistay utilizar losmétodos get()ygetName()de laclase Fieldpara obtener el valor y el nombre de cada atributo respectivamente
- Podemos
-
Finalmente
imprimiresta información en la terminal para que el usuario pueda verla -
El cuerpo del
métodoquedaría así
public static <T> void printObject(T obj) {
Class<?> cls = obj.getClass();
Field[] fields = cls.getDeclaredFields();
for (Field field : fields) {
try {
System.out.println(field.getName() + ": " + field.get(obj));
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}
- Podemos utilizar este
métodoparaimprimirla información de cualquier tipo de objeto en la terminal
Ejemplo de impresión
- Si queremos imprimir la información de un
objeto Personpodemos pasar unainstanciade laclase Personcomoargumentoalmétodo printObject()de la siguiente manera
Person p = new Person("John Doe", 30);
printObject(p);
- Imprimirá en la
terminalla información delobjeto Person
Name: John Doe
Age: 30
En resumen
-
Clase Class<T>permite-
Obtener información sobre
tipos de objetosentiempo de ejecución -
Crearcódigo más flexible y reutilizable
-
-
Utilizamos la
clase Class<T>para- Crear un
método genéricoque puedeimprimirlainformaciónde cualquiertipo de objetoen la terminal
- Crear un
Deja un comentario