2013-03-11 3 views
0

간단한 프로그램에서 클래스의 동적로드를 시도했으며 간단한 이름으로 클래스를 동적으로로드하려고 시도했을 때 intrestingly classnotfoundexception으로 실패합니다. 이것은 클래스가 기본 패키지가 아닌 다른 패키지 아래에있는 경우에만 발생합니다.Class.forName을 통한 동적 클래스 로딩은 간단한 클래스 이름과 함께 작동합니까?

하지만 전체 경로 이름을 지정하면 동적로드가 성공합니다. 로드되는 클래스는 Main 클래스와 동일한 패키지에 있습니다.

파일 Main.java는 :

public class Main { 

    public static void main(String[] args) throws InstantiationException, IllegalAccessException, ClassNotFoundException {     
     System.out.println(Class.forName("m")); 
    } 
} 

class m extends Main{ 
} 
+0

그럼 분명히 자신의 질문에 답변하지 않았습니까? –

답변

3

아니, Class.forName항상 패키지 자격을 갖춘 클래스 이름이 필요합니다. parameter documentation :

className - 원하는 클래스의 정규화 된 이름

호출 코드의 패키지는 부적합합니다.

+0

답장을 보내 주셔서 감사합니다. 그러나 그러한 제한의 근거를 말씀해 주시겠습니까? 내 생각 엔 여러 패키지의 클래스 간 충돌을 피할 수 있습니까? – broun

0

당신은

같은 클래스 패키지 이름을

com.sample입니다 가정 System.out.println(Class.forName("com.sample.M"));

여기에 클래스의 정규화 된 클래스 이름을 넣어해야합니다.