2010-03-26 7 views
2
내 클래스 ProjectNode 내 방법을 액세서하는 방법을 잘 모릅니다

, 즉 ExplorerManager MGR이 등으로부터 반환됩니다왜 setSomething()을 호출 할 수 없습니까?

mgr.getRootContext().setSomething() 

getRootContext()는 노드 객체를 반환하지만 내가 (AbstractNode를 확장 클래스 ProjectNode을 넣어 abstractNode은 노드를 확장)를 rootContext에 추가합니다.

컴파일러는 해당 코드 줄을 먹고 싶지 않습니다. 그러나 반드시!

답변

1
((ProjectNode)mgr.getRootContext()).setSomething(); 

유형을 확인하는 것을 잊지 마세요 : 당신은 필요하면 다른 클래스에 반환 값을 캐스팅 할 수 있습니다!

+0

작동합니다. – badgirl

3

getRootContext()Node을 반환하면 Node에 정의 된 메소드 만 호출 할 수 있고 하위 클래스는 정의 할 수 없습니다.

Node rootContext = mgr.getRootContext(); 
if(rootContext instanceof ProjectNode){ 
    ProjectNode rootProjectNode = (ProjectNode)rootContext; 
    rootProjectNode.setSomething(); 
} else { 
    //handle this case 
} 
0

setSomething()Node 클래스의 공용 메서드가 아니면 시도하는 방법에 관계없이 해당 코드를 "컴파일러에 공급"할 수 없습니다. 모든 현자가 위에서 말한대로 결과를 setSomething() 메서드를 정의하는 하위 클래스로 캐스팅해야합니다.

관련 문제