zu verwenden Ich habe vor kurzem in ein bisschen Mühe beim Versuch, eine meiner bukkit Plugins Version durch Reflektion zu machen. Die Sache ist, ich weiß, wie man eine Instanz einer Klasse unter Verwendung ihres Namens erstellt, aber ich weiß nicht, wie man den Klassennamen als Typ für eine Methode oder einen Konstruktorparameter verwendet. Mit anderen Worten, ich möchte diese zu transformieren:Wie Klassenname als Typ für Methode Argument
public class Foo{
private Goat goat;
public Foo(Goat goat){
this.goat=goat;
}
in so etwas wie folgt aus:
public class Foo{
private Class.forName("mypackage.Goat") goat;
public Foo(Class.forName("mypackage.Goat") goat){
this.goat=goat;
}
Ehrlich gesagt weiß ich nicht, ob es überhaupt möglich ist, aber es würde eine Menge bei der Herstellung meiner Entwicklung helfen schneller.
EDIT:
Meine Situation ist ein wenig komplizierter als das, was ich vor vorgestellt. Das ist der Grund, warum ich keine Generika verwenden kann. Der oben abgebildete "Ziegen" -Typ I ist eigentlich eine Klasse in einem mir unbekannten Paket, daher kenne ich nur den Klassennamen. Daher muss ich die Class.forName-Methode zusammen mit einem kleinen Algorithmus verwenden, der die aktuelle bukkit-Version erkennt und an den Paketnamen anfügt, den ich bereits kenne, so dass net.minecraft.server zu net.minecraft.server.v1_8_R1 wird Mit anderen Worten, ich kenne nur den Klassennamen zur Laufzeit. Ich weiß, ich sauge zu erklären ...
einen Blick auf Generika nehmen: https://docs.oracle.com/javase/tutorial/java/generics/ – user987339