Ich versuche derzeit, etwas wie folgt zu erreichen: Basierend auf dieser Klasse, versuche ich eine neue Instanz der Klasse < zu erstellen? erweitert AbstractValidator> zurückgegeben von der Methode getValidator().Instanziieren Sie ein Objekt aus einer dynamisch generierten Klasse
public abstract class AbstractEnumDefinition
extends AbstractRequestFieldDefinition {
private Vector<String> values = new Vector<String>();
public abstract void define(String lang);
protected void addEnumDefinition(String value){
values.add(value);
}
public Vector<String> getValues(){
return values;
}
@Override
public Class<? extends AbstractValidator> getValidator() {
return new AbstractValidator() {
@Override
public boolean isValid(String value) {
return values.contains(value);
}
@Override
public String getDefaultValue() {
return "";
}
}.getClass();
}
}
sagen, dass ich diese Klasse zu erstellen:
public class LanguageDefinition extends AbstractEnumDefinition {
public LanguageDefinition() {
super();
}
@Override
public void define(String language) {
addEnumDefinition("BEL-fr");
addEnumDefinition("BEL-nl");
addEnumDefinition("BEL-en");
}
}
Später in meinem Code, ich nenne
new LanguageDefinition().getValidator().getConstructor().newInstance()
Die Klasse ich hier zu instanziiert versuche nicht überall erklärt, sondern „erzeugt dynamisch "/" dynamisch erstellt "innerhalb der AbstractEnumDefinition-Klasse.
Beim Versuch, dies zu tun, erhalte ich eine java.lang.InstantiationException
für
be....servlets.model.extraction.filter.editor.AbstractEnumDefinition$1
Ich denke, dies ist auf die Tatsache zurückzuführen ist, dass diese Klasse ausdrücklich vor der Hand erstellt werden muss, und nicht dynamisch referenziert?
Gibt es eine Lösung, die es mir erlaubt, nicht eine Klasse pro Validator schreiben zu müssen?
Danke für die Hilfe,
Eric
Was meinst du mit * dynamisch erstellte Klasse *? Wir sind nicht sicher, ob wir Sie dort verstehen. – adarshr
Möglicherweise Abwesenheit von No-Param-Konstruktor macht die GetInstance() für diese Klasse fehlschlagen. Und das bedeutet, dass anonyme Klassen nicht durch Reflexion instanziiert werden können. – yggdraa
Nur die Frage aktualisiert, um die Dinge zu klären. Vielen Dank. – efj