В настоящее время я пытаюсь достичь чего-то подобного: На основе этого класса я пытаюсь создать новый экземпляр класса Class.возвращается методом getValidator ().
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();
}
}
Допустим, я создаю этот класс:
public class LanguageDefinition extends AbstractEnumDefinition {
public LanguageDefinition() {
super();
}
@Override
public void define(String language) {
addEnumDefinition("BEL-fr");
addEnumDefinition("BEL-nl");
addEnumDefinition("BEL-en");
}
}
Позже в моем коде я вызываю
new LanguageDefinition().getValidator().getConstructor().newInstance()
КлассЯ пытаюсь создать экземпляр здесь, нигде не объявлен, но "сгенерирован динамически" / "динамически создан" в классе AbstractEnumDefinition.
При попытке сделать это я получаю java.lang.InstantiationException
для
be....servlets.model.extraction.filter.editor.AbstractEnumDefinition$1
Я полагаю, это связано с тем, что этот класс должен быть явно создан заранее, а не иметь динамическую ссылку?
Есть ли какое-то решение, которое позволило бы мне не писать одинкласс на валидатор?
Спасибо за помощь,
Эрик