Hej udvikleren
Jeg er ved at udvikle på et lille hobby projekt hvor jeg har brug for en helt traditionel træ struktur.
Jeg har derfor lavet en klasse Node og en klasse Tree. Surprise surprise
Problemet ligger i, at jeg gerne vil stille mig selv den garanti, at alle klasser der implementere mit Node interface også er cloneable. Jeg ved dog ikke hvordan dette kan realiseres.
Lige nu har jeg denne løsning, men det er jo slet ikke generelt (for ikke at nævne ret hacket med to casts, ugh), da det er i den implementerende klasse at jeg implementerer Cloneable interfacet.
- public class SimpleNode implements Node, Cloneable
- {
- Node leftChild, rightChild;
-
- //metoder er fjernet da de ikke er relevante for dette problem.
-
- protected Object clone() throws CloneNotSupportedException
- {
- Node clone = (Node)super.clone();
- if (leftChild != null)
- clone.addChild((Node)((SimpleNode)leftChild).clone(), AT.LEFTSIDE);
-
- if (rightChild != null)
- clone.addChild((Node)((SimpleNode)rightChild).clone(), AT.RIGHTSIDE);
-
- return clone;
- }
- }
-
- public interface Node
- {
- public static enum AT
- {
- LEFTSIDE, RIGHTSIDE
- }
-
- String getData();
- Node getChild(AT child);
- void addChild(Node node, AT direction);
- void delChild(AT direction);
- boolean isLeaf();
- }
Laver jeg interfacet om så det er
- public interface Node extends Cloneable
- {
- public static enum AT
- {
- LEFTSIDE, RIGHTSIDE
- }
-
- String getData();
- Node getChild(AT child);
- void addChild(Node node, AT direction);
- void delChild(AT direction);
- boolean isLeaf();
- }
Giver det compile fejl hvis jeg laver noget ala:
- Node node = new SimpleNode("9");
- Node clone = node.clone();
Håber der sidder en java haj der ude, der kan hjælpe mig