2016-04-26 12 views
0

Ich habe eine Klasse, die von 1 bis 4 Parameter dauern kann. Sie sind immer Strings. Ich möchte ein Objekt dieser Klasse basierend auf der Anzahl der an die Funktion übergebenen Argumente erstellen. Gibt es eine Möglichkeit, einen Konstruktor zu erstellen und ein Array von Objekten direkt an newInstance zu übergeben?Erstellen einer Klasse mit Parameter Konstruktor in Scala Reflexion

 NewInstanceWithReflection clazz = (NewInstanceWithReflection)Class.forName("NewInstanceWithReflection").newInstance(); 
     Constructor constructor = NewInstanceWithReflection.class.getDeclaredConstructor(new Class[] {String.class}); 
     NewInstanceWithReflection object1 = (NewInstanceWithReflection)clazz.newInstance(new Object[]{"StackOverFlow"}); 

Dieser in sbt-Interpreter eingefügte Code scheint nicht zu funktionieren. Jede Hilfe wird geschätzt.

Antwort

0

Sie haben alles falsch (nicht zu erwähnen, es ist Java-Syntax, nicht Scala). So etwas sollte in scala arbeiten:

classOf[NewInstanceWithReflection] 
    .getDeclaredConstructor(classOf[String]) 
    .newInstance("StackOverFlow") 

Und das ist, was Sie in Java bräuchten:

NewInstanceWithReflection 
    .class 
    .getDeclaredConstructor(String.class) 
    .newInstance("StackOverFlow") 
+0

Sorry, ich habe mein Codebeispiel vermasselt. Ich wollte nur wissen, ob es möglich ist, den '.getDeclaredConstructor (classOf [String])' zu überspringen, da die Anzahl der Stringargumente von 1 bis 4 variieren kann und die dynamische Anzahl der Argumente an die 'newInstance'-Methode übergeben wird . – NNamed

+0

nein, das ist nicht möglich ... 'newInstance' ist eine Methode für das' Konstruktor'-Objekt. Sie müssen das Objekt haben, um eine Methode dafür aufzurufen. Das "Überspringen" der Objektinstanz wird also nicht funktionieren. – Dima

Verwandte Themen