2014-04-28 47 views
-2

的實例,我有以下的含有OfficeSchool類:使用Java反射來獲取一個內部類

class School { 
    class Offcie { 
     Office() { 
      ... 
     } 
    } 
} 

在另一個地方,我得到一個實例School命名mySchool

正常的方式來實例化Office是:

School mySchool = new School(); 
Office myOffice = mySchool.new Office(); 

但如何使用Java反射使用mySchool實例來得到實例Office

回答

0

獲取Office無參數Constructor的引用,並用一個參數School實例調用它。

Constructor<Office> constructor = Office.class.getDeclaredConstructor(School.class); 
Office office = constructor.newInstance(new School()); // or your instance 

這在javadoc

說明如果構造的聲明類是在非靜態 上下文內部類中,第一參數給構造需要是 包圍實例;請參閱Java™語言 規範的第15.9.3節。

+0

但是我無法直接訪問Office類,找不到'Office'。我只能通過Class.forName(「com.xx.yy.School $ Office」)找到; – user842225

+0

@ user842225使用'Class.forName'。它返回一個你可以使用的'Class'對象。如果你得到一個'ClassNotFoundException',你有一個不同的問題。 –

相關問題