Zu wissen, dass Storage ist eine Schnittstelle und StorageXX sind ihre Implementierungen, ich möchte wissen, ob es möglich ist, den folgenden Code zu ersetzen ...Schalter ersetzen durch dynamische Konstruktor
Storage storage;
switch (storageType) {
case "list":
storage = new StorageList();
break;
case "map":
storage = new StorageMap();
break;
case "db":
storage = new StorageDB();
break;
default:
throw new UnsupportedStorageTypeException();
}
... von einem „dynamischen Konstruktor "des Speichers, der einen String-Parameter (den storageType) genommen hat, gibt die jeweils gewünschte Instanz zurück ...
Es spielt keine Rolle, ob Storage eine abstrakte Klasse sein soll.
Ich würde lieber lieber eine switch-Anweisung vermeiden, wenn möglich.
Mögliches Duplikat von [So erhalten Sie ein Klassenobjekt aus dem Klassennamen in Java] (https://stackoverflow.com/questions/1438420/how-to-get-a-class-object-from-the-class -name-in-java) – UnholySheep
Wenn Sie "StorageDB" in "StorageDb" umbenannt haben, können Sie den Namen dynamisch erstellen und Reflektion verwenden. – Andreas
Würde [diese Antwort] (https://stackoverflow.com/a/29220300/6893866) aus einer anderen Frage Ihre Bedürfnisse gut genug? (erfordert Java 8) – Tezra