2016-07-21 4 views
2

Ein Java-Projekt enthält eine Methode zum Zeichnen einer Schaltfläche "Bearbeiten". Können Sie bitte den Nutzen einer Schnittstelle hier erklären? Was kann eine Schnittstelle tun, was ein einfacher JBotton button = new JButton(); nicht kann?Verwenden einer Schnittstelle und Generics zum Zeichnen einer Schaltfläche in Java

private ValueObject<?> getButtonValueObject() { 
     ValueObject<?> buttonValue = new MutableValueObject<Object>() { 
      private String title = "Edit"; 

      @Override 
      public Object getValue() { 
       return new AbstractAction(title) { 
        public void actionPerformed(ActionEvent e) { 
         final JDialog dialog = new JDialog(); 
         dialog.setTitle("Values"); 
         dialog.setLayout(new BorderLayout());       
         JPanel panel = new JPanel(); 
         dialog.add(panel, BorderLayout.NORTH); 
         ....... 

         dialog.setVisible(true); 
        } 

        @Override 
        public String toString() { 
         return title; 
        } 
       }; 
      } 
     }; 
     return buttonValue; 
    } 


//ValueObject.java 
public interface ValueObject<T> { 
    T getValue(); 
} 
+0

Das scheint nicht im Zusammenhang zu stehen und ist daher schwer zu erklären. Gibt es für dieses Projekt keine Dokumentation, auf die Sie sich beziehen können? – Thomas

+0

@Thomas Nicht wirklich. Können Sie ein paar Beispiele nennen, wenn solche Schnittstellen nützlich sein können? Es ist in Ordnung, wenn sie nur entfernt mit diesem Fall verwandt sind. – sixtytrees

+0

Ohne mehr Kontext ist es schwierig "solche" Schnittstellen zu definieren und daher kann ich dafür keine Beispiele nennen. Ich könnte ein Beispiel dafür geben, wann und warum Interfaces im Allgemeinen nützlich sind, aber es gibt viele davon bereits im Netz. – Thomas

Antwort

3

Es gibt eine Menge Probleme in diesem Code nicht zu erwähnen, es ist nur das Problem zu komplizieren. Es gibt einen Principal namens KISS und diese Art von Code geht direkt dagegen.

Einige Probleme Details:

  • Privat Abstraktion Methode, ohne etwas Brauch mit (in den entsandten Code).
  • Anonymus (innere) Klasse Verwendung ist nicht bevorzugt. Some readings here.

Weitere schlechte Praktiken:

  • Sollte private String title = "Edit" sein; veränderbar? Nein -> warum nicht statisch?
  • dialog.setTitle ("Werte"); enthält eine fest verdrahtete Zeichenfolge.
  • Namen zeigen nicht, was "ValueObject", "MutableValueObject"

TL.DR sollen tun: kein gutes Beispiel für Generika. Versuchen Sie, den Quellcode einfach zu halten, damit er von Menschen gelesen werden kann.

Verwandte Themen