1.:
Diese Klasse:
...erbt von dieser Klasse :
2.: Ich habe die beiden Klassen nicht geschrieben, das ist aber nicht von Belang, leider kann ich den Urheber nicht fragen, da er seine Kreise woanders zieht.
3.: Meine Frage:
Wieso hat derjenige, der die Klassen geschrieben hat, in der Klasse "NonTerminalNode" bei der Initialisierung des children-Feldes die clone()-Methode verwendet. Weshalb ist das hier
nötig?
Diese Klasse:
Java:
import java.util.*;
import java.util.regex.*;
public class NonTerminalNode extends Node {
private Node[] children;
public NonTerminalNode( String label, Node[] children ) {
super( label );
this.children = children.clone(); //Wieso clonen?
}
Node[] getChildren() {
return this.children.clone();
}
public String toString() {
String result = getLabel()+":( ";
for ( Node c: this.children ) {
result += c.toString() + " ";
}
result += ")";
return result;
}
}
Java:
import java.util.*;
import java.util.regex.*;
public class Node {
private String label;
public Node( String label ) {
this.label = label;
}
public String getLabel() {
return this.label;
}
public String toString() {
return this.label;
}
public static Node parse( StringBuilder nodeRepr ) {
Node n = TerminalNode.parse( nodeRepr );
if ( n == null ) {
n = NonTerminalNode.parse( nodeRepr );
}
if ( n == null ) {
Matcher m = Pattern.compile( "\\s*([^\\s:()]+)" ).matcher( nodeRepr );
if ( m.lookingAt() ){
n = new Node( m.group(1) );
nodeRepr.delete(0, m.end());
}
}
return n;
}
public static void main( String[] args ) {
StringBuilder sb = new StringBuilder( "S:( NE:Hans VP:( VVFIN:liebt NE:Maria ) )" );
System.err.println( Node.parse( sb ) );
}
}
2.: Ich habe die beiden Klassen nicht geschrieben, das ist aber nicht von Belang, leider kann ich den Urheber nicht fragen, da er seine Kreise woanders zieht.
3.: Meine Frage:
Wieso hat derjenige, der die Klassen geschrieben hat, in der Klasse "NonTerminalNode" bei der Initialisierung des children-Feldes die clone()-Methode verwendet. Weshalb ist das hier
Java:
this.children = children.clone();