2
我不知道如果我在這裏使用的是正確的術語..但如果我的包的名稱設置如下:清單類在包的子目錄
com.example.fungame
-ClassA
-ClassB
-com.example.fungame.sprite
-ClassC
-ClassD
我如何編程方式獲得一個數組(一個Class[]
我猜)在.sprite
子目錄中的所有類?
我不知道如果我在這裏使用的是正確的術語..但如果我的包的名稱設置如下:清單類在包的子目錄
com.example.fungame
-ClassA
-ClassB
-com.example.fungame.sprite
-ClassC
-ClassD
我如何編程方式獲得一個數組(一個Class[]
我猜)在.sprite
子目錄中的所有類?
試試這個方法:
public static Class[] getClasses(String pckgname) throws ClassNotFoundException {
ArrayList classes=new ArrayList();
File directory = null;
try {
directory = new File(Thread.currentThread().getContextClassLoader().getResource(pckgname.replace('.', '/')).getFile());
} catch(NullPointerException x) {
throw new ClassNotFoundException(pckgname + " does not appear to be a valid package");
}
if (directory.exists()) {
// Get the list of the files contained in the package
String[] files = directory.list();
for (int i = 0; i < files.length; i++) {
// we are only interested in .class files
if(files[i].endsWith(".class")) {
// removes the .class extension
try {
Class cl = Class.forName(pckgname + '.' + files[i].substring(0, files[i].length() - 6));
classes.add(cl);
} catch (ClassNotFoundException ex) {
}
}
}
} else {
throw new ClassNotFoundException(pckgname + " does not appear to be a valid package");
}
Class[] classesA = new Class[classes.size()];
classes.toArray(classesA);
return classesA;
}
我嘗試了幾次這個子目錄,甚至是'getPackageName()',但它總是拋出'ClassNotFoundException' – Snailer 2010-11-13 20:43:49
不知道我理解的問題。你沒有目錄中的類,你有文件。那麼你在問如何實例化這些文件所代表的類,並將每個類的實例放入數組中?順便說一句,即使這是可能的,它可能必須是一個Object []',除非它們從一個不太常規的類共享繼承。 – klactose 2010-11-13 20:00:47
這個問題之前已經被問過很多次了,其中之一就是這樣一個:[從類路徑中的java包中讀取所有類](http://stackoverflow.com/questions/1456930/read-all-classes-from-java- package-in-classpath) – 2010-11-13 20:09:07
klactose,我沒有提到實例化它們。並回應「你沒有目錄中的課程,你有文件」..你認爲文件位於哪裏?這是正確的..一個目錄! seanizer,你應該發佈你的回答作爲答案。 – Snailer 2010-11-13 20:50:45