私は現在、次のようなことを達成しようとしています: このクラスに基づいて、クラス 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
これは、このクラスを動的に参照するのではなく、事前に明示的に作成する必要があるためでしょうか?
バリデーターごとに 1 つのクラスを作成する必要がないようにする解決策はありますか?
助けてくれてありがとう、
エリック