2013-09-03 5 views
3

JavaDocs에 따르면 java.lang.ClassnewInstance() 방법은 null을 반환하지 않습니다. 그러나 내 코드는 그 반대를 증명하는 것 같습니다. 왜?newInstance()가 null을 반환하는 이유는 무엇입니까?

public Assessment createAssessment() { 
    Class<? extends Assessment> assessmentClass = (Class<? extends Assessment>) assessmentClassDataTable.getRowData(); 
    try { 
     System.out.println("ASSESSMENTCLASS " + assessmentClass); 
     // -> 'ASSESSMENTCLASS class my.model.ManualSelectAssessment' 
     Assessment a = assessmentClass.newInstance(); 
     System.out.println("ASSESSMENT " + a); 
     // -> 'ASSESSMENT null' 
     return a; 
    } catch (Exception e) { 
     Application.handleError(e); 
    } 
    return null; 
} 

null을 반환합니다.

+1

'ManualSelectAssessment'의'toString' 메소드는''null ''을 리턴 할 수 있습니까? –

+0

아마도 예외를 throw하지 않고 캐치 된 다음 null을 반환한다고 확신 할 수 있습니까? – DaveRlz

+0

클래스에 인수가없는 생성자가 있는지 확인하십시오. –

답변

7

newInstance()는 null을 반환하지 않습니다. 그러나 newInstance().toString()은 다음을 반환 할 수 있습니다. "null"

참고 : newInstance()가있는 하나의 잡화는 CheckedException을 throw 할 수 있습니다. IOException이는 체크 예외는 있지만

public Main() throws IOException { 
    throw new IOException(); 
} 

public static void main(String[] args) throws InstantiationException, IllegalAccessException { 
    Main.class.newInstance(); // throws IOException silently. 
} 

컴파일러)를 위해서, newInstance (안 생각을 갖고이 예외를 확인 발생합니다. 그것을 잡으려고하면 컴파일러가 던져 질 수 없다는 불평을 할 것입니다 !!

+0

'IOException'은'InstantiationException'에 싸여 있지 않습니까? –

+0

InstantiationException은 클래스 객체가 추상 클래스, 인터페이스, 배열 클래스, 프리미티브 유형 또는 void를 나타내는 경우입니다. 또는 클래스에 무효 생성자가 없습니다.'Constructor.newInstance()' –

+0

흥미 롭습니다, 나는 항상 그것이'InvocationTargetException'처럼 기능을했지만. 그건 분명히 잡았다. –

관련 문제