Avatar ·

Qual é a diferença entre getName(), getCanonicalName() e getSimpleName() em Java?

Olá! Acabei de começar a estudar reflexão em Java e me deparei com três métodos: `getName()`, `getCanonicalName()` e `getSimpleName()`. Não entendo muito bem como eles diferem. Por exemplo, tenho uma classe simples `Person` no pacote `com.example.model`. Tentei escrever o seguinte 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()); } } ``` Todos os três métodos exibem algo semelhante: `getName` mostra `com.example.model.Person`, `getSimpleName` — apenas `Person`, e `getCanonicalName` — também `com.example.model.Person`. Mas ouvi dizer que para classes aninhadas ou arrays eles podem diferir. Pode explicar com exemplos reais em quais situações esses métodos dão resultados diferentes?