2012-04-07 5 views
2

Bitte vergib mir meine Unwissenheit, aber ich konnte anderswo keine Antwort finden.Java: Wie eine Klasse an eine Funktion zur Instanziierung übergeben wird

Ich habe den folgenden Code:

int value = 5; 
Strategy s = new Strategy(convert(value)); 
mainClass.setStuff(s, value); 

Die Strategie mit einer Reihe initialisiert wird, die auf einem Umsatz von „Wert“ basieren. Die mainClass verwendet den nicht konvertierten "Wert".

Ich möchte dies vereinfachen, indem mainClass nur die Information gibt, welche Strategie zu verwenden ist und mit welchem ​​nicht konvertierten Wert, worauf mainClass die Instanziierung und Initialisierung der Strategie vornehmen und den Wert verarbeiten soll.

In C++ ist dies mit einer Vorlage möglich sein:

int value = 5; 
mainClass.setStuff<Strategy>(value); 

Kann ich diese Arbeit in Java irgendwie machen? Es scheint nicht mit Generics zu funktionieren, im Gegensatz zu C++, kann Java den Typ des Arguments nicht ableiten, daher kann ich Strategy nicht initialisieren.

Antwort

5

Ändern Sie die Methodensignatur setStuff in public <T extends Strategy> ReturnType setStuff(Class<T> clazz, int value). Dann können Sie find the correct constructor und erstellen Sie Ihre new instance.

+0

Aber würde das nicht bedeuten, ein Objekt an setStuff zu übergeben? Mit anderen Worten, ich müsste die Strategie instantiieren, sie an setStuff übergeben, was sie wiederum zur Verwendung instanziieren würde? Ich sehe hier keinen Vorteil. – Cerno

+0

@Cerno Nein, Sie übergeben die 'Klasse' des Objekts, nicht das Objekt selbst. Wenn Sie die Strategie-Klasse weitergeben möchten, rufen Sie 'setStuff (Strategy.class, value)' auf. – Jeffrey

+0

Ah, ich verstehe. Ich werde es versuchen. – Cerno

Verwandte Themen