Also, bitte übersetzen Sie dies und behalten Sie die gleichen HTML-Tags bei, wenn diese existieren, von en nach de:
Ich habe also eine Schnittstelle SuperType
und eine Reihe von Implementierungsklassen TypeA
, TypeB
und so weiter. Ich habe auch eine Top-Level-Schnittstelle, die eine parametrisierte Methode hat:
public interface UsedByProductThing {
public T doStuff(T one);
}
Ich habe eine Fabrik (siehe unten), die Objekte erzeugt, die GeneralProduct
implementieren:
public interface GeneralProduct {
T doSomething(T input);
}
Hier ist die Implementierung von ProductA
:
public class ProductA implements GeneralProduct {
UsedByProductThing in;
public ProductA(UsedByProductThing in) {
this.in = in;
in.doStuff(new TypeA());
}
@Override
public TypeA doSomething(TypeA input) {
return null;
}
}
Und nun die betreffende Fabrik:
public class GeneralFactory {
public static GeneralProduct createProduct(
int type, UsedByProductThing in) {
switch (type) {
case 1:
return (GeneralProduct) new ProductA((UsedByProductThing) in);
// an diesem Punkt möchte ich idealerweise ein "new ProductA(in)" zurückgeben
// ohne Umwandlung
// oder zumindest ohne die Umwandlung des Arguments.
default:
throw new IllegalArgumentException("Typ unbekannt.");
}
}
}
Wie kommentiert, möchte ich, dass die Fabrikmethode keine Umwandlung verwendet. Mir ist klar, dass der Rückgabetyp GeneralProduct sein muss, aber ich kann mir keinen Weg vorstellen, wie ich die Umwandlung (und sie gibt mir auch eine "unchecked cast"-Warnung) vermeiden kann. Auch fällt mir keine Möglichkeit ein, die Umwandlung des Arguments zu umgehen. Ich kann den gesamten Code umstrukturieren, wenn es notwendig ist, um die "unsichere" Umwandlung an dieser Stelle loszuwerden. Können Sie mir einen Weg zeigen, der hier schön und problemlos wäre?
Bitte bearbeiten Sie auch meine Frage nach Ihren Wünschen - ich weiß nicht, wie ich das Problem in der Überschrift korrekt ansprechen soll.
Vielen Dank!