그것은 사용하여 수행 할 수있는 Reflection API : 어떤 시점에서
Class<?> klazz = Class.forName("javax.swing.JPanel");
JPanel panel = (JPanel) klazz.newInstance();
당신이 forName()
방법에 정규화 된 클래스 이름을 통과해야 공지 사항, 그것은 (에 대한 형식 매개 변수로 수 Class<?>
또는 위 코드에서와 같은 캐스트를 사용하여) 인스턴스화하려는 클래스를 명시 적으로 지정해야합니다. 인스턴스의 정확한 유형을 걱정하지 않는 경우 또는, 당신은 단순히이 작업을 수행 할 수 있습니다
Object obj = klazz.newInstance();
을 또한, 나는 클래스가없는 인수 생성자를 정의했다고 가정하고있다. 그런 경우가없는 경우 새 개체를 인스턴스화하기 전에 먼저 Constructor
객체를 생성해야합니다 :
Class<?> klazz = Class.forName("javax.swing.JPanel");
Constructor<?> constructor = klazz.getDeclaredConstructor(/* parameter types */);
JPanel panel = (JPanel) constructor.newInstance();
왜이 작업을 수행 하시겠습니까? 필요한 모든 유효성 검사는 코드를 읽을 수 없게 만듭니다. – Hidde
이것이 리플렉션을 통해 수행 될 수 있다고 생각하지만 여기에 더 많은 상황을 제공 할 수 있습니까? 왜이 기능이 필요/필요합니까? –
음,'Class.forName()'으로 처리 한 다음 적절한 생성자를 호출 할 수 있습니다. 그러나 왜 이것을 필요로할까요? –