2011-03-30 20 views
7

我正試圖建立一個通用類加載器。我需要檢查我加載的方法參數的類,以確定它們是否屬於同一個類。如何檢查作爲Class對象的參數的instanceof?

該代碼主要解釋我正在嘗試做什麼。

private static LinkedList<Object> loadObjectsInDirectory(Class class0, File dir) throws ClassNotFoundException { 

      LinkedList<Feature> objects = new LinkedList<Object>(); 

      ClassLoader cl = new GenericClassLoader(); 

      for(String s : dir.list()) { 
       Class class1 = cl.loadClass(s); 
       try { 
        Object x = class1.newInstance(); 
        if (x instanceof (!!! class0 !!!)) { 
         objects.add(x); 
        } 
       } catch (InstantiationException ex) { 
       } catch (IllegalAccessException ex) { 
       } 

      } 

      return objects; 

     } 

這是如何實現的?

+2

「kelass」??!?爲什麼人們不得不繼續使用「課堂」的創意替代拼寫,例如「klass」,「clazz」,而不是簡單而不那麼刺耳的「class0」或「class1」或「cl」或其他? – 2011-03-30 02:08:07

+0

這是波斯人,寶貝。 – Bijan 2014-04-18 19:57:44

回答

18

看起來你需要的isAssignableFrom方法

if (kelass.isAssignableFrom(klass)) { 
    objects.add(x); 
} 

的JavaDoc

判定此Class對象所表示的類或接口或者是相同,或是一個超類或超接口,由指定的Class參數表示的類或接口。如果是的話,它返回true;否則返回false。如果此Class對象表示基本類型,則此方法返回true,如果指定的Class參數恰好是此Class對象;否則返回false。

具體而言,此方法測試指定Class參數表示的類型是否可以通過標識轉換或通過擴展參考轉換轉換爲此Class對象表示的類型。有關詳細信息,請參閱Java語言規範,第5.1.1和5.1.4節。

+0

而且,當然,不再需要實例化類以加載它。 – 2011-03-30 02:11:42