2012-07-17 2 views
0

context.lookup() 호출 결과를 포털 응용 프로그램에서 캐스팅하는 동안 다른 결과를 캐스팅 할 때 세 번의 시도 중 두 번에 대해 ClassCastException이 표시됩니다.ClassCastException을 반올림하지 못함

약간의 연구 끝에 나는 다음과 같이 생각한다. http://wiki.sdn.sap.com/wiki/display/TechTSG/%28AS+Java%29+ClassCastException+Occurs+After+Lookup+Operation은 답을 가지고 있지만 실제로 두 단계를 수행하는 방법을 설명하지는 않는다.

이 코드는 list에 저장된 해당 경로에서 iView를의 세부 사항을 가져 오는 작동 :

IiView transView1 = (IiView) context.lookup(list.get(i).toString()); 

그러나이 같은 작업 세트의 세부 사항을 가져올 때 :

IPcdContext attrSet = (IPcdContext) context.lookup(list.get(i).toString()); 

나는 ClassCastException를 얻을 수 . 이 오류가 발생하는 이유에 대한 도움이나 설명은 크게 감사하겠습니다!

편집 : http://www.sdn.sap.com/irj/scn/go/portal/prtroot/docs/library/uuid/6112ecb7-0a01-0010-ef90-941c70c9e401?overridelayout=true

EDIT2 :이 코드를 기반으로 무엇을 나는 것은, Context.lookup에서 다시 얻을 목적은 I가 문서를 찾을 수 없습니다 com.sapportals.portal.pcd.pcm.roles.PortalWorkset입니다.

+1

정확한 예외 텍스트는 무엇입니까? – jtahlborn

+2

아마도 'context.lookup'에서 얻은 결과가 'IPcdContext'가 아니기 때문에 아마 예외가 발생합니다. 당신은 그것을'Object'로 포착하고'.getClass(). getName()'을 사용해서 얻은 것을 알아 내야합니다. –

답변

1

context.lookupPortalWorkset이면, ClassCastException을 "얻을 수있는 방법이 없습니다.

캐스팅이 없습니다. 다른 클래스에 객체를 변환하십시오. 이것은 현재 선언 된 유형보다 더 구체적인 클래스라고 컴파일러에 알리는 방법 일뿐입니다. 이 경우에는 "lookup() 메서드가 Object을 반환한다고 선언했지만이 특정 컨텍스트에서이 메서드를 호출하면 항상 IPcdContext 개체를 반환합니다." 귀하의 가정은 여기에 드러나지 않는 것으로 밝혀졌으며, 프로그램은 예외를 던집니다.

문제에 대한 잠재적 인 두 가지 원인이 있습니다

: 때문에 당신이 lookup 방법에 기대하는 문자열을 전달하지 않는 로직 버그

  1. 당신의 가정은 일반적으로 정확하지만은, 그래서는 틀린 것을 전부 되 찾는 것. 이 경우 메서드에 전달 된 매개 변수가 항상 올바른지 확인하십시오.
  2. 가정이 잘못되어 이 아닌 경우은 항상 IPcdContext이됩니다. 이 경우 반환되는 다른 객체로 수행 할 작업을 결정하고 적절하게 처리해야합니다 (instanceof 연산자를 사용하여 반환 된 객체의 클래스를 확인할 수 있음). 어떤 경우

, 당신은 같은 관용구와이 처음 성공 있는지 확인하는 것이 도움이있어 캐스팅, 할 때마다 :

IPcdContext context; 
Object obj = context.lookup("foo"); 
if (obj instanceof IPcdContext) { 
    context = (IPcdContext)obj; 
} 
else { 
    // You got back something else. What to do? 
} 
관련 문제