Es gibt ein Problem, mit dem ich konfrontiert bin, und ich kenne die technischen Begriffe nicht, um es zu beschreiben. Daher war es schwierig für mich zu suchen eine Antwort selbst und ich hoffe, dass jemand in der Lage ist, etwas Licht zu werfen, was hier vor sich geht.Vermeidung einer doppelten Methodendefinition in 2+ ähnlichen untergeordneten Klassen innerhalb einer Java-Bibliothek
Nehmen wir an, eine Bibliothek hat 2 oder mehr ähnliche Klassen mit ähnlichen Funktionen wie JTextField und JTextArea. Ich möchte diesen beiden Klassen eine zusätzliche Methode zur Verfügung stellen.
Ich könnte beide Klassen erweitern und die Methode zu jedem hinzufügen, aber die hinzuzufügende Methode könnte so ähnlich sein, dass sie in jede Klasse kopiert und eingefügt werden könnte. Das lässt mich denken, dass es einen besseren Weg gibt, dies zu tun.
In diesem vereinfachten Beispiel ist es möglich: A) in der Nähe der doppelten Definition von „GetStringValue()“ zwischen CustomJTextField und CustomJTextArea während B) Beibehaltung der ursprünglichen Funktionalität von JTextArea und JTextField eliminieren.
CONCEPTUAL Beispiel:
public interface AnInterface {
public String getStringValue();
}
public class CustomJTextField implements AnInterface{
//Could Duplication of this method be avoided?
@Override
public String getStringValue(){
return this.getText();
}
}
public class CustomJTextArea implements AnInterface{
//Mirrors CustomJTextField's definition
@Override
public String getStringValue(){
return this.getText();
}
}
public class CustomJCheckbox implements AnInterface{
@Override
public String getStringValue(){
return this.isSelected() ? "Checked" : "Not Checked";
}
}
public class Main{
public static void main(String[] args) {
ArrayList<AnInterface> items = new ArrayList<AnInterface>();
items.add(new CustomJTextField());
items.add(new CustomJTextArea());
items.add(new CustomJCheckbox());
for (AnInterface item : items){
String output = item.getStringValue();
System.out.println(output);
}
}
}
Meine Frustration war, dass ich nicht nur scheinen kann JTextComponent zu erweitern, ohne die Funktionalität von JTextField und JTextArea zu verlieren, aber wenn beide verlängert werden, fühlt es sich wie unnötige Duplizierung. Gibt es eine elegante Möglichkeit, diese Art von Duplizierung zu vermeiden?
Danke schön! – Zachary
Sie sind herzlich willkommen. :-) – PNS