2017-03-09 2 views
0

Ich habe das zerbrechliche Basisklassenproblem verstanden, und ich weiß, dass wir es lösen können, indem wir Komposition über Vererbung verwenden oder private Methode in der Oberklasse deklarieren. Jetzt versuche ich zu verstehen, wie dieses Problem mit Hilfsmethode zu lösen, so werde ich den klassischen Code der fragilen Basisklasse setzen und dann werde ich meine Lösung mit Helfer Methode setzen, sagen Sie mir, wenn ich etwas falsch machen bitte. Wie man die zerbrechliche Basisklasse mit Hilfsmethoden löst

Dies ist der Code einer fragilen Basisklasse (aus Wikipedia)

public class JavaApplicationProvaHello { 


    public class A { 
     private int i; 

     public void inc1(){ 
      i++; 
     } 

     public void inc2(){ 
      inc1(); 
     } 
    } 
    //--------------------------- 
    public class B extends A{ 
     @Override 
     public void inc1(){ 
      inc2(); 
     } 
    } 
    //------------------------ 
    public class Test{ 
     public static void main(String[] args) { 
      B b = new B(); 
      b.inc1(); 
     } 
    } 
} 

Jetzt habe ich die Klasse A ändern und setzte zwei private Hilfsmethoden, die von der öffentlichen Methode INC1 aufgerufen werden, und INC2

public class A { 
    protected int i; 

    public void inc1(){ 
     inc1Helper(); 
    } 

    public void inc2(){ 
     inc2Helper(); 
    } 

    private void inc1Helper(){ 
     i++; 
    } 

    private void inc2Helper(){ 
     inc1Helper(); 
    } 
} 

In meinem Compiler funktioniert alles, ich habe mich gefragt, ob dies die beste Lösung ist, zerbrechliche Basisklasse mit Hilfsmethoden zu lösen. Danke für die Aufmerksamkeit.

Antwort

1

"Beste" ist eine Meinung.

Meiner Meinung nach wäre eine bessere Antwort, einen Javadoc-Kommentar auf inc2() zu hinterlassen, der besagt, dass es inc1() ruft.

/** Increments <code>i</code> by calling <code>inc1()</code> */ 
public void inc2() 
... 

Dann wer A erstreckt, dass in der Dokumentation. Wenn sie es vermissen, werden sie es wissen, wenn sie die Stapelüberwachung für ihre Stapelüberlaufausnahme betrachten.

Auf diese Weise werden immer noch einige Zeilen in der Datei benötigt, es sind jedoch keine tatsächlichen Zeilen mit funktionalem Logikcode und kein generierter Bytecode mehr erforderlich. Der Wikipedia-Artikel, den Sie erwähnen, schlägt (und für Java dennoch) die Dokumentation als eine der Antworten vor.

Verwandte Themen