我目前正试图实现如下目标: 基于这个类,我尝试创建一个新的类类实例<?扩展方法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
为
be....servlets.model.extraction.filter.editor.AbstractEnumDefinition$1
我想这是由于这一类必须事先明确创建,而不是动态引用的事实呢?
是否有某种解决方案可以让我不必为每个验证器编写一个类?
感谢您的帮助,
埃里克
你是什么意思*动态创建类*?我们不确定我们是否了解您。 – adarshr 2012-03-30 13:05:15
可能缺少no-param构造函数,导致getInstance()失败。这意味着无法通过反射实例化无法实现的类。 – yggdraa 2012-03-30 13:12:52
刚刚更新了问题,澄清了事情。谢谢。 – efj 2012-03-30 13:14:41