Почему я не могу вызвать setSomething ()? - PullRequest
2 голосов
/ 26 марта 2010

Я не знаю, как получить доступ к моему методу моего класса ProjectNode, который возвращается из ExplorerManager mgr следующим образом:

mgr.getRootContext().setSomething()

getRootContext () возвращает объект Node, но я помещаю класс ProjectNode (расширяет AbstractNode, abstractNode расширяет Node) в корневой элемент.

Компилятор не хочет есть эту строку кода. Но это должно!

Ответы [ 3 ]

3 голосов
/ 26 марта 2010

Если getRootContext() возвращает Node, то вы можете вызывать только методы, определенные в Node, но не в его подклассах. Если вам нужно, вы можете привести возвращаемое значение к другому классу:

Node rootContext = mgr.getRootContext();
if(rootContext instanceof ProjectNode){
    ProjectNode rootProjectNode = (ProjectNode)rootContext;
    rootProjectNode.setSomething();
} else {
    //handle this case
}
1 голос
/ 26 марта 2010
((ProjectNode)mgr.getRootContext()).setSomething();

не забудьте проверить тип!

0 голосов
/ 26 марта 2010

Если setSomething() не является публичным методом в классе Node, вы не можете «накормить» этот код компилятором - независимо от того, как вы пытаетесь.Как говорили все мудрецы выше, вы должны привести результат к подклассу, который определяет ваш метод setSomething().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...