0

現時点でロードされているすべてのクラスで、特定のパターンに一致するクラスを検索したいと思います。

たとえば、私は次のようなことをしたいと思います:

List<Class<?>> classess = getClassesFromPattern("*.Entity*");

その結果、次のようになります。

com.package.EntityA
com.package.EntityB
com.package.EntityC

どうすればそれを実装できますか?

4

3 に答える 3

1

corn-cpsなら簡単

List<Class<?>> classes = CPScanner.scanClasses(new PackageNameFilter(
                "com.package"), new ClassNameFilter("*Entity*"));
于 2013-05-28T13:04:55.433 に答える
0

最初に Instrumentation.getInitiatedClasses(ClassLoader) を実行します ( http://docs.oracle.com/javase/6/docs/api/java/lang/instrument/Instrumentation.html#getInitiatedClasses(java.lang.ClassLoader)を参照)。 loader が開始ローダーであるすべてのクラスの配列。指定されたローダーが null の場合、ブートストラップ クラス ローダーによって開始されたクラスが返されます。getInitiatedClasses メソッドによって返される結果でパターンを検索します

于 2013-05-15T14:50:40.720 に答える
0

あなたが望むほど単純ではありません。

Class.forName()指定した完全修飾クラス名に従って 1 つのクラスを取得します。

クラスパスを分析し、すべてのクラスパス フラグメントを読み取り、クラスをリソースとして読み取り (jar ファイルとプレーン ディレクトリとは異なります)、パターンに従ってクラスを検索できます。

良いニュースは、そのようなライブラリが存在することです。これはReflectionsという名前です。実装されたインターフェイス、注釈、(おそらく) クラス名パターンなど、さまざまな基準でクラスを取得できます。また、拡張可能であり、必要に応じて独自の実装を追加できます。

于 2013-05-15T14:51:06.023 に答える