Wie übergebe ich eine statische Klasse als Argument in Java?

8

Ich habe eine Basisklasse namens "Entity", die eine statische Methode namens "construct" hat, die eine Entity-Instanz zurückgibt. Ich habe mehrere verschiedene Unterklassen dieser Klasse (für die Demonstration nehmen wir an, dass "Obst" und "Gemüse" als Unterklassen verwendet werden). Ich möchte in der Lage sein, etwas in den folgenden Zeilen zu tun:

%Vor%

someFunction würde dann Textdatei an Fruit.construct übergeben und die generierte Entität zurückgeben. Gibt es einen einfachen Weg, dies zu tun?

    
user491880 21.08.2012, 21:25
quelle

7 Antworten

10

Verwenden Sie stattdessen ein Werksmuster .
Übergeben Sie die Textdatei an die Factory-Methode, die sie verwendet, um die richtige konkrete Instanz von Entity

zurückzugeben     
Cratylus 21.08.2012, 21:30
quelle
3

Übergeben Sie Fruit.class an die Funktion und verwenden Sie dann die Reflektion für dieses Klassenobjekt, um den richtigen Konstruktor aufzurufen. Beachten Sie, dass dies Ihre Superklasse ziemlich eng an ihre Unterklassen koppelt, indem Sie fordern, dass der Konstruktor existiert.

    
Marko Topolnik 21.08.2012 21:28
quelle
3

Du meinst so etwas:

%Vor%

Der obige Code wird den Konstruktor no-arguments der Klasse verwenden (vorausgesetzt, es gibt einen).

Wenn Ihre Klasse mit einem bestimmten Konstruktor instanziiert werden muss, können Sie diesem Beispiel folgen:

%Vor%     
Shivan Dragon 21.08.2012 21:34
quelle
1

Fruit in Ihrem Beispiel ist ein Typ, und während Fruit.eat() sich auf eine statische Methode bezieht, ist Fruit keine "statische Klasse".

Es gibt ein "Klassenobjekt", das eigentlich ein Object ist, das die Klasse darstellt. Übergeben Sie es stattdessen. Um dorthin zu gelangen, wird die Syntax Fruit.class verwendet.

    
Edwin Buck 21.08.2012 21:30
quelle
0

Statische Methoden werden per se nicht vererbt, wenn der Code Entity.construct (...) enthält, wird er nicht dynamisch mit der Unterklasse verknüpft.

Der beste Weg, um das zu erreichen, was Sie verlangen, ist die Verwendung von reflection, um die construct-Methode für die Fruit-Klasse aufzurufen (oder welche Klasse auch immer in die someFunction () -Methode übergeben wurde.

)     
Steven Mastandrea 21.08.2012 21:30
quelle
0

Sie versuchen, ein objektorientiertes Entwurfsmuster, Strategie , zu implementieren, indem Sie prozeduralen Code verwenden. Tu es nicht.

Erstellen Sie stattdessen eine Schnittstelle namens EntityConstructor , die die Methode construct() definiert. Machen Sie Fruit und Vegetable diese Schnittstelle implementieren. Ändern Sie dann someFunction() , um eine Instanz dieser Schnittstelle zu übernehmen.

    
parsifal 21.08.2012 21:36
quelle
0

Hier ist eine Implementierung:

%Vor%

Sie sollten nach

schauen
joel1di1 21.08.2012 21:45
quelle

Tags und Links