Avatar ·

¿Cuál es la diferencia entre getName(), getCanonicalName() y getSimpleName() en Java?

¡Hola! Acabo de empezar a estudiar reflexión en Java y me encontré con tres métodos: `getName()`, `getCanonicalName()` y `getSimpleName()`. No entiendo bien en qué se diferencian. Por ejemplo, tengo una clase simple `Person` en el paquete `com.example.model`. Intenté escribir este código: ```java package com.example.model; public class Person { public static void main(String[] args) { Class clazz = Person.class; System.out.println("getName: " + clazz.getName()); System.out.println("getSimpleName: " + clazz.getSimpleName()); System.out.println("getCanonicalName: " + clazz.getCanonicalName()); } } ``` Los tres métodos muestran algo similar: `getName` muestra `com.example.model.Person`, `getSimpleName` — solo `Person`, y `getCanonicalName` — también `com.example.model.Person`. Pero he oído que para clases anidadas o arrays pueden diferir. ¿Puedes explicar con ejemplos reales en qué situaciones estos métodos dan resultados diferentes?