Hi,
ich habe ein Interface Converter<I, S>, von dem es mehrere Implementierungen verschiedener Kategorien gibt.
Zur Laufzeit sollen die Converter austauschbar sein, weshalb ich mich für das Factory-Pattern entschieden habe. Problem hierbei sind die Generics.. Jede Implementierung hat für I und S komplett verschiedene Objekttypen. Kann ich nun trotzdem eine Factory erstellen, die mir ein Converter-Objekt zurück gibt, das nicht mehr gecastet werden muss?
Mein Interface sieht so aus
Eine mögliche Implementierung sieht so aus
oder
Wie baue ich dann mein Factory so, dass es nach außen hin typsicher bleibt?
Meine Factory sieht so aus
Wirklich dynamisch bin ich damit ja nicht unbedingt unterwegs. Hat jemand eventuell einen Tipp für mich?
ich habe ein Interface Converter<I, S>, von dem es mehrere Implementierungen verschiedener Kategorien gibt.
Zur Laufzeit sollen die Converter austauschbar sein, weshalb ich mich für das Factory-Pattern entschieden habe. Problem hierbei sind die Generics.. Jede Implementierung hat für I und S komplett verschiedene Objekttypen. Kann ich nun trotzdem eine Factory erstellen, die mir ein Converter-Objekt zurück gibt, das nicht mehr gecastet werden muss?
Mein Interface sieht so aus
Code:
public interface Converter<I, S> {
S convert(I i) throws Exception;
boolean wasSuccessful();
}
Eine mögliche Implementierung sieht so aus
Code:
public class IntConverter implements Converter<String, List<Integer>>{
@Override
public List<Integer> convert(String s) {
/**
* do some conversions
*/
}
}
oder
Code:
public class GradeConverter implements Convert<List<URL>, List<Grade>>{
@Override
public List<Grade> convert(List<URL> urls){
/**
* do some work
*/
}
}
Wie baue ich dann mein Factory so, dass es nach außen hin typsicher bleibt?
Meine Factory sieht so aus
Code:
public static Converter<?, ?> createConverter(Type t) throws NoSuchDetectorException {
switch (t) {
case CASE1:
return new IntConverter();
case CASE2:
return new GradeConverter();
default:
throw new NoSuchDetectorException("No converter installed for framework: " + t.getVal());
}
}
Wirklich dynamisch bin ich damit ja nicht unbedingt unterwegs. Hat jemand eventuell einen Tipp für mich?