2014-06-23 4 views
-1

Apple 및 Banana에 구현 된 인터페이스 Fruit이 있습니다. 내 메인 클래스에서 과일은 다음과 같이 호출됩니다 :클래스 이름 만 문자열로 가져 오기

Fruit fruit = new Apple(); 

어떻게 "Apple"문자열을 검색 할 수 있습니까?

fruit.getClass().getName()

또는

fruit.getClass().getSimpleName()

를 사용하면 java.lang.NullPointerException이에게 내가 AppleBanana 예에 기능을 피하기 위해 노력하고

을 제공합니다 getClassName().

편집 : 위의 간단한 질문이 문제를 지적하지 않는 것 같으므로 자세한 내용/방법을 추가하십시오. 아래 내용을 더하면 전체 코드를 복사하는 것입니다. 다시 말하지만, 아래는 단순화 된 것입니다.

public class Clustering { 
    private DistanceMeasure measure; //Manhattan or Euclidean 
    private ClusterMethod method; //SingleLinkage or CompleteLinkage 
    private Clusterer clusterer; 

public static void main(String[] args) { 
    new Clustering().start(); 
} 
    Clustering() { 
     measure = new Manhattan(); 
     method = new SingleLinkage(measure); 
     clusterer = new Clusterer(method); 
    } 
    void start() { 
     clusterer = setMethod(); 
     clusterer.next(); //would use the ClusterMethod to do some calculations; clusterMethod which is saved inside Clusterer class when creating the new class i.e. new Clusterer(method). the nullException occurs here 
    } 
    Clusterer setMethod() { 
     measure = new Euclidean(); 
     if (method.getClass().getSimpleName().equals("SingleLinkage")) { 
      method = new CompleteLinkage(measure); 
     } 
     else method = new SingleLinkage(measure); 
     return new Clusterer(method); 
    } 
} 

위 내용이 올바른 것 같습니까? nullException은 setMethod()를 사용하지 않고 잘 작동하는 clusterer.next()를 사용할 때 발생합니다.

+6

'fruit.getClass(). getSimpleName()'은 무엇을 반환합니까? –

+0

클래스 이름에 대한 런타임 테스트 전에 '과일'참조가 'Apple'인스턴스 이외의 것으로 지정 되었습니까? – Mena

+0

getName() 또는 getSimpleName()을 사용할 때 java.lang.NullPointerException이 발생합니다. – Dimebag

답변

4

응답 : fruit.getClass()... 호출은 NullPointerException을 던졌습니다.

fruit 변수가가 Apple의 새로운 인스턴스를 할당 한 후 자리 를 취할 가능성이 클래스 이름에 대한 테스트시에 null 값이 할당된다는 것을 의미한다.

nullObject에서 메소드를 호출하면 NullPointerException가 발생합니다. 군더더기로 주

NullPointerExceptiongetClass() 메소드 호출에 도달하기 전에 을 던져 경우, 당신은 NullPointerException을 던져 관련없는 코드의 다른 부분에서 다른 문제가 런타임 클래스 이름 검사와 함께.

+0

두 번째 옵션 인 것 같습니다. getSimpleName()은 이름을 반환하지만 내 코드의 다른 부분은 그 작업을 수행 한 후 작동하지 않는 것 같습니다. 좀 더 '노는'후에 나는 돌아올거야. – Dimebag

+0

내가 사용하고있는보다 간결한 코드로 원래 질문을 수정했습니다. 그것을보십시오. – Dimebag

+0

@Dimebag 당신은'Clusterer' 클래스, 즉'next' 메소드의 코드를 게시하지 않았습니다. 이것은 당신의 코멘트에 따라'NPE'의 원인이되는 것입니다. 새로운 질문을하는 것이 좋습니다. – Mena

관련 문제