web-dev-qa-db-ja.com

文字列からクラス型を取得する

クラス名が"Ex"(拡張子.classなし)のStringがあります。次のように、Class変数に割り当てたい:

Class cls = (string).class

どうやってやるの?

68
Steven
Class<?> cls = Class.forName(className);

ただし、classNameは完全に修飾する必要があります。つまり、com.mycompany.MyClass

148
Bozho
String clsName = "Ex";  // use fully qualified name
Class cls = Class.forName(clsName);
Object clsInstance = (Object) cls.newInstance();

詳細については、Java Reflectionのチュートリアルトレイル http://Java.Sun.com/docs/books/tutorial/reflect/TOC.html を参照してください。

40
JuanZe

forNameClassメソッドを使用できます。

Class cls = Class.forName(clsName);
Object obj = cls.newInstance();
6
rsp

Java Reflection Concept。を使用して、実行時にクラスのクラス参照を取得できます。

以下のコードを確認してください。以下に説明します

以下は、返されたClassを使用してAClassのインスタンスを作成する1つの例です。

package com.xyzws;
class AClass {
    public AClass() {
        System.out.println("AClass's Constructor"); 
    }  
    static {   
        System.out.println("static block in AClass");  
    }
}
public class Program {   
    public static void main(String[] args) {
        try {       
            System.out.println("The first time calls forName:");   
            Class c = Class.forName("com.xyzws.AClass");      
            AClass a = (AClass)c.newInstance();    
            System.out.println("The second time calls forName:");  
            Class c1 = Class.forName("com.xyzws.AClass"); 
        } catch (ClassNotFoundException e) { 
            // ...
        } catch (InstantiationException e) {  
            // ...
        } catch (IllegalAccessException e) { 
            // ...
        }     
    }
}

印刷出力は

    The first time calls forName:
    static block in AClass
    AClass's Constructor
    The second time calls forName:

クラスはすでにロードされているため、2番目の「AClassの静的ブロック」はありません。

説明は以下です

Class.ForNameは、クラスオブジェクトを取得するために呼び出されます

クラスオブジェクトを使用して、クラスの新しいインスタンスを作成しています。

これについて疑問がある場合はお知らせください

4
gmhk

eeh .. Class.forName(String classname)?

3
Hans Westerbeek

あなたが何を求めているのかわかりませんが、... Class.forname 、多分?

2
Manrico Corazzi