[java] 문자열에서 클래스 유형 가져 오기

나는 String클래스의 이름을 가지고 있습니다 "Ex"( .class확장자 없음 ). 다음 Class과 같이 변수 에 할당하고 싶습니다.

Class cls = (string).class

어떻게 할 수 있습니까?



답변

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

그러나 귀하 className는 완전한 자격을 갖추어야합니다.com.mycompany.MyClass


답변

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

자세한 내용 은 Reflection에 대한 Java Tutorial 추적 ( http://java.sun.com/docs/books/tutorial/reflect/TOC.html) 을 확인하십시오.


답변

다음 forName방법을 사용할 수 있습니다 Class.

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


답변

Java Reflection Concept을 통해 런타임 중에 모든 클래스의 클래스 참조를 얻을 수 있습니다.

아래 코드를 확인하십시오. 아래에 설명이 나와 있습니다.

다음은 반환 된 Class를 사용하여 AClass의 인스턴스를 만드는 한 가지 예입니다.

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:

클래스가 이미로드되었으므로 두 번째 “AClass에 정적 블록”이 없습니다.

설명은 다음과 같습니다.

Class.ForName은 클래스 객체를 얻기 위해 호출됩니다.

Class Object를 사용하여 Class의 새 인스턴스를 만듭니다.

이것에 대한 의심이 있으면 알려주세요


답변

그것은해야한다:

Class.forName(String classname)


답변

무엇을 요청하는지 잘 모르겠지만 … Class.forname , 아마도?


답변