7

ジェネリック クラス ローダーを構築しようとしています。メソッド引数に対してロードするクラスをチェックして、それらが同じクラスであるかどうかを判断する必要があります。

コードは、主に私がやろうとしていることを説明しています。

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;

        }

これはどのように達成されますか?

4

1 に答える 1

19

isAssignableFromメソッドが必要なようです

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

JavaDoc

このClassオブジェクトによって表されるクラスまたはインターフェースが、指定されたClassパラメーターによって表されるクラスまたはインターフェースと同じであるか、スーパークラスまたはスーパーインターフェースであるかを判別します。その場合はtrueを返します。それ以外の場合はfalseを返します。このClassオブジェクトがプリミティブ型を表す場合、指定されたClassパラメーターがまさにこのClassオブジェクトである場合、このメソッドはtrueを返します。それ以外の場合はfalseを返します。

具体的には、このメソッドは、指定されたClassパラメーターによって表される型が、ID変換または拡張参照変換によってこのClassオブジェクトによって表される型に変換できるかどうかをテストします。詳細については、Java言語仕様のセクション5.1.1および5.1.4を参照してください。

于 2011-03-30T01:34:54.450 に答える