我目前正在尝试实现这样的目标:基于此类,我尝试创建类 Class<? 扩展方法 getValidator() 返回的 AbstractValidator>。
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
for
be....servlets.model.extraction.filter.editor.AbstractEnumDefinition$1
我想这是因为这个类必须事先明确创建,而不是动态引用?
是否有某种解决方案可以让我不必为每个验证器编写一个类?
谢谢您的帮助,
埃里克