2009-10-06 3 views
0

Можно ли преобразовать переменную String в объект DefaultMutableTreeNode? Пожалуйста, объясните. Контекст:Строка переменной для объекта DefaultMutableTreeNode?

String s = new String(outputTagName); 
Object s2 = (Object) s; 
DefaultMutableTreeNode selectedNode2 =(DefaultMutableTreeNode) s2; 
DefaultMutableTreeNode parent2 =(DefaultMutableTreeNode) parent; 
model.insertNodeInto(selectedNode2, parent2, parent2.getChildCount()); 

Это код, я написал. Это используется в перечислении, которое пересекает дерево в режиме BreadthFirstSearch. И 2НФ линия дает мне эту ошибку:

java.lang.ClassCastException: java.lang.String cannot be cast to javax.swing.tree.DefaultMutableTreeNode at .... 

ответ

0

Вы не можете наложить объект String на любой тип, отличный от String или Object, или один из интерфейсов String (Serializable, CharSequence, Comparable). Чтобы отличить объект от какого-либо типа, объект должен быть этого типа. Объект String имеет тип String, а не тип DefaultMutableTreeNode. Вы даже не можете сделать DefaultMutableTreeNode подклассом String (в этом случае кастинг будет возможен), поскольку класс String является окончательным.

+0

Могу ли я преобразовать тип String в Object, а затем преобразовать Object в тип DefaultMutableTreeNode? – fixxxer

+0

Строка всегда является объектом, но объект не всегда является DefaultMutableTreeNode – Nettogrof

+0

@Nettogrof Что вы думаете об ANSWER ниже этого комментария? – fixxxer

1

Это зависит от целиком на семантике дерева вы хотите использовать узел с.

Например, вы можете создать узел, содержащий строку так просто, как:

String s = ...; // your string 
new DefaultMutableTreeNode(s); 

ли это будет любое использование для вас, зависит от того, как вы используете дерево.

В основном, больше контекста пожалуйста. В противном случае этот простой ответ «да» - это лучшее, что вы получите. :-p

+0

Что было бы семантикой, о которой вы говорите? Могу ли я иметь больше, чем да, пожалуйста? : P – fixxxer

+0

@fixxxer: Я имею в виду, что процесс «преобразования», на который ссылается ваш вопрос, зависит от того, какие свойства вы хотите получить у получаемого узла, - что зависит в свою очередь от того, как вы его используете. Таким образом, мой ответ создаст узел, который обертывает данную String, но если другие узлы содержат 'Booleans' или' Files' или 'MyCustomRunnableImpl' (искал строковый идентификатор), это не принесло бы вам пользы. В принципе, то, что я написал, будет работать во многих ситуациях, которые ваш вопрос мог бы описать, и терпеть неудачу во многих других, которые он мог бы описать. –

+0

По моему опыту, я не смог придать String объекту DefaultMutableTreeMode, поскольку программа выдает ошибки (я запускал ее в Elcipse IDE). Поэтому я использовал метод setUserObject для присоединения строки к узлу. Но это просто временный обход, в моем случае. – fixxxer

0

Link that you have provide in your other question

Вы можете видеть, что вы можете сделать новый DefaultMutableTreeNode ("Любая строка");

Чтобы исправить пример кода, способ сделать это:

String s = new String(outputTagName); 

DefaultMutableTreeNode selectedNode2 = new DefaultMutableTreeNode(s2); 
1

Поправьте меня, если я ошибаюсь, но мне кажется, что вы хотите изменить, отображающее текст выбранного узла к некоторому новому данному тексту. Если это так, я думаю, что это может помочь.

DefaultMutableTreeNode node=(DefaultMutableTreeNode)tree.getLastSelectedPathComponent(); 
node.setUserObject("New Node Text"); 
Смежные вопросы