Wildcard aus Parameter in return type

  • Themenstarter Themenstarter Vayu
  • Beginndatum Beginndatum
V

Vayu

Gast
Hiho,

wahrscheinlich funktioniert es nicht, ich hab schon viel rumprobiert, aber es nicht hinbekommen. Und zum suchen fehlen mir vielleicht die richtigen Suchbegriffe.

ich möchte folgendes. Ich habe eine Factory-Methode, in die ich eine Class reingebe und ein neues Objekt dieser Klasse erzeuge. Nun möchte ich, dass der Rückgabewert denselben Typ hat wie der, der als Parameter reingegeben wurde. In etwa so:

Java:
public ? getFactory(Class<? extends IFactoryType> type) {
    // create the factory and return it
    IFactoryType f = m_Factories.get(type);
    if (f == null) {
        try {
            f = type.newInstance();
        } catch (InstantiationException e) {} 
        catch (IllegalAccessException e) {}
	m_Factories.put(type, f);
    }
    return f;
}

Der Aufrufer ruft nun diese Methode auf und gibt MyFactory.class als Parameter in die Methode, die IFactoryType implementiert. Und soll nun auch direkt eine MyFactory zurückbekommen.
Kann man das irgendwie hinkriegen oder muss ich einen IFactoryType zurückgeben und dann casten?

Danke schonmal,
Vayu
 
Nur kurz geschaut, sowas wie

public <T> T getFactory(Class<T extends IFactoryType> type) {

geht nicht?

EDIT: Äh... früh am morgen

public <T extends IFactoryType> T getFactory(Class<T> type) {
 
ja ne, da zwinge ich den Entwickler ja nicht auch einen IFactoryType in die Methode reinzugeben. und ein Class<T extends IFactoryType> wirft mir Compilerfehler.

edit: OH DOCH. Danke 🙂 Ich dachte, als T kann dann irgendwass reingeworfen werden.
Ich dachte es müsste sowas wie Class<T extends IFactoryType> als Parameter sein ...

Danke!

Ich muss dann in der Methode beim return type noch auf T casten, aber das geht in Ordnung denke ich
 
Zuletzt bearbeitet von einem Moderator:

Zurück
Oben