Ich schreibe gerade einen XML-Konverter für ein Supply-Chain-Projekt. Wir verwenden Anfragen und Bestellungen.Verwendung Methode des generischen Typs
Der Konverter hat mehrere Methoden, die zur Zeit dasselbe tun, aber separat für Anfragen und Bestellungen implementiert werden.
ich geschaffen habe daher eine abstrakte Klasse Wartbarkeit des Codes zu verbessern und einen generischen Typen verwendet:
public abstract class AbstractConverter<T extends BusinessObject>
Dann habe ich die spezifischen Implementierungen für den eigentlichen Wandler
public class OrderConverter extends AbstractConverter<Order>
public class RequestConverter extends AbstractConverter<Request>
Wie gesagt , Ich habe mehrere Methoden in den zwei spezifischen Klassen, die im Grunde dasselbe tun, also möchte ich sie natürlich in der abstrakten Klasse haben. Ich habe hinzugefügt nun die folgende Methode die abstrakte Klasse:
protected Comment createComment(T obj) {
String remark;
if (obj instanceof Order) {
remark = ((Order) obj).getRemark();
} else if (obj instanceof Request) {
remark = ((Request) obj).getRequestRemark();
} else {
throw new IllegalArgumentException("This method does not support objects of the type " + obj.getClass().toString());
}
return new Comment(remark);
}
Meine Frage ist nun: ist dies der Weg zu gehen, oder gibt es eine elegantere Möglichkeit Generika in diesem Zusammenhang zu benutzen?
Ich brauche das gelöst, aber ich möchte auch guten Stil verwenden.
Was bedeutet "im Wesentlichen" bedeuten? Es gibt kein "ein bisschen schwanger". Sie sind die gleichen, dann ziehen sie sie in die abstrakte Klasse oder sie sind nicht, dann implementieren Sie sie separat (siehe Weros Antwort). Steigende Komplexität und Unerreichbarkeit durch die Einführung von if/else/instance von Blöcken ist IMHO wirklich eine schlechte Idee. – Fildor