การสะท้อน Java enum เมื่อ enum อยู่ในคลาส

ฉันมีคลาสหลายอินสแตนซ์ที่มี enum เดียวซ้อนอยู่ข้างใน นี่คือคลาสดังกล่าวในเวอร์ชันที่เรียบง่าย:

public class FirstClass extends BaseClass {

  public enum EnumGroup {
      ONE("one"),
      TWO("two");

      private String mName;

      EnumGroup(String name) {
        this.mName = name;
      }

      public String getName() {
        return mName;
      }  
  }

  // FirstClass methods
}

เป้าหมายของฉันคือการวนซ้ำคลาสเหล่านี้โดยทางโปรแกรม (เช่น FirstClass, SecondClass ฯลฯ ) และดึง enum (เรียกว่า "EnumGroup เสมอ") ออกมาแล้วเรียกใช้เมธอด getName() ในแต่ละค่าของ enum

ฉันได้ดู โพสต์ StackOverflow นี้ ในการสะท้อนกลับของ Java และ enums แต่เมื่อฉันพยายามดึง enum ของฉันโดยการระบุเส้นทาง (com.package.FirstClass.EnumGroup) ฉันจะได้รับ ClassNotFoundException ฉันเดาว่าการใส่ enum ไว้ในชั้นเรียนกำลังทำให้บางอย่างยุ่งเหยิง

Class<?> clz = Class.forName("com.package.FirstClass.EnumGroup");

ฉันไม่ต้องการการตั้งค่านี้ แต่เป้าหมายสุดท้ายไม่มีรหัสเดียวกันในแต่ละคลาสที่วนซ้ำในแจงนับ


person Mark    schedule 19.10.2015    source แหล่งที่มา
comment
สวัสดี @JBNizet - เพิ่มบรรทัดที่ส่ง ClassNotFoundException   -  person Mark    schedule 19.10.2015
comment
ทำไมต้องใช้ Class.forName()? ทำไมไม่ใช้คลาสลิเทอรัล com.package.FirstClass.EnumGroup.class ล่ะ? คุณจะไม่มีข้อยกเว้น คอมไพเลอร์จะตรวจสอบว่าคุณใช้ชื่อคลาสที่ถูกต้อง และการรีแฟคเตอร์จะทำให้โค้ดของคุณถูกต้องโดยอัตโนมัติ   -  person JB Nizet    schedule 19.10.2015
comment
ผู้ลงคะแนนสามารถอธิบายได้ไหมว่าทำไมคำถามนี้ไม่ดีหรือไม่ได้มาตรฐานของพวกเขา? ขอบคุณ!   -  person Mark    schedule 20.10.2015


คำตอบ (1)


เนื่องจากคุณใช้ Class.forName คุณจึงจำเป็นต้องใช้ ชื่อ ของคลาส และในชื่อคลาสประเภทภายในจะถูกแยกออกจากประเภทภายนอกด้วย $

ดังนั้นใช้

Class<?> clz = Class.forName("com.package.FirstClass$EnumGroup");
//                                                  ^
person Pshemo    schedule 19.10.2015
comment
คำตอบที่รวดเร็วและถูกต้องอย่างน่าอัศจรรย์ ขอบคุณ @Pshemo! :) - person Mark; 19.10.2015