Avatar ·

ما الفرق بين getName() و getCanonicalName() و getSimpleName() في Java؟

مرحبًا! بدأت للتو في تعلم الانعكاس في Java ووجدت ثلاث طرق: `getName()` و `getCanonicalName()` و `getSimpleName()`. لا أفهم تمامًا كيف تختلف. على سبيل المثال، لدي كلاس بسيط `Person` في الحزمة `com.example.model`. جربت كتابة هذا الكود: ```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()); } } ``` الطرق الثلاثة تُظهر شيئًا مشابهًا: `getName` يُظهر `com.example.model.Person`، و `getSimpleName` يُظهر فقط `Person`، و `getCanonicalName` يُظهر أيضًا `com.example.model.Person`. لكنني سمعت أنه بالنسبة للكلاسات المتداخلة أو المصفوفات، قد تختلف. هل يمكنك التوضيح بأمثلة حقيقية عن الحالات التي تعطي فيها هذه الطرق نتائج مختلفة؟