나는 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의 새 인스턴스를 만듭니다.
이것에 대한 의심이 있으면 알려주세요