2017-01-27 2 views
1

Ich mache einige Natural Language Processing und daher eine Satzklasse implementiert ist im Grunde eine ArrayList mit einigen Meta-Informationen. Ich möchte schreiben überschreiben seine ToString() -Methode, die einfach die Strings durch Leerzeichen getrennt eingefügt. Ich habe es mit der vererbten get-Methode arbeiten lassen, aber ich habe mich gefragt, ob es möglich und besser (in Bezug auf Effizienz und Kodierungspraxis) wäre, direkt auf die Felder zuzugreifen.ToString-Methode für Klasse inherristen von ArrayList

Hier ist eine vereinfachte Version meiner Klasse:

public class Sentence extends ArrayList<String> { 
    int sentimentScore; 
    String Speaker; 

    @Override 
    public String toString(){ 
     StringBuilder sb = new StringBuilder(); 
     for(int i =0; i < super.size(); i++){ 
      sb.append(super.get(i)); 
      sb.append(" "); 
     } 
     return sb.toString(); 
    } 

Antwort

2

Es ist besser, die get() Methode zu verwenden. In Bezug auf die Geschwindigkeit sollte es Ihren Code nicht sehr verlangsamen (wenn Sie etwas anderes glauben, sollten Sie ein kleines Programm schreiben, um den Effekt der Geschwindigkeitsverschlechterung zu demonstrieren, bevor Sie diese Überzeugung haben). Noch wichtiger ist, ArrayList legt seine internen Felder nicht frei, und das ist ein gutes Design. Dieses Design schirmt zukünftige Nebeneffekte auf andere ab (Unterklassen, die es erweitern), sollte der Betreuer entscheiden, die interne Implementierung von ArrayList zu ändern.

By the way, können Sie auch eine alternative Konstruktion berücksichtigen wollen - anstatt dass SentenceArrayList verlängern, lassen SentenceArrayList enthalten. Dies wird das Prinzip Zusammensetzung über Vererbung genannt.

Aus Wikipedia: https://en.wikipedia.org/wiki/Composition_over_inheritance

Zusammensetzung über Vererbung (oder Verbund Wiederverwendung Prinzip) in objektorientierten Programmierung ist das Prinzip, dass Klassen sollten durch ihre Zusammensetzung polymorphe Verhalten und die Wiederverwendung von Code erreichen (von enthält Instanzen anderer Klassen, die die gewünschte Funktionalität implementieren statt Vererbung von einer Basis-oder Elternklasse. Dies ist ein oft angegebenes Prinzip der OOP, wie in den einflussreichen Design Patterns: "Favor 'Objekt Zusammensetzung' über 'Klasse Vererbung'."

+1

Vielen Dank für die Erläuterung und den Vorschlag für weitere Messungen. –

Verwandte Themen