Java 从动态生成的类实例化对象

Java 从动态生成的类实例化对象,java,reflection,instantiation,dynamically-generated,Java,Reflection,Instantiation,Dynamically Generated,我目前正在努力实现以下目标: 基于该类,我尝试创建该类的新实例我只能做出假设,因为我看不到您实际使用该类的代码,但您应该检查: 它提到的一件事是,实例化可能会失败,因为类是一个抽象类(因为不能实例化抽象类,所以逻辑性很好) 另外,我不明白为什么需要返回类,然后创建对象。为什么不定义一个验证器接口并让您的方法返回一个验证器对象呢。据我所知,这对匿名类不起作用,您必须将您的类转换为一个命名的内部类: 但即使这样也无法正常工作,因为您可能没有默认构造函数。内部类获取隐式构造函数参数以保留对封闭类的引用

我目前正在努力实现以下目标:
基于该类,我尝试创建该类的新实例我只能做出假设,因为我看不到您实际使用该类的代码,但您应该检查:

它提到的一件事是,实例化可能会失败,因为类是一个抽象类(因为不能实例化抽象类,所以逻辑性很好)


另外,我不明白为什么需要返回类,然后创建对象。为什么不定义一个验证器接口并让您的方法返回一个验证器对象呢。

据我所知,这对匿名类不起作用,您必须将您的类转换为一个命名的内部类:

但即使这样也无法正常工作,因为您可能没有默认构造函数。内部类获取隐式构造函数参数以保留对封闭类的引用。不幸的是,闭包在静态语言中不能很好地工作


总之,非静态的内部类不能在封闭类的实例之外实例化。

动态创建的类是什么意思?我们不确定是否理解您的意思。可能由于缺少任何参数构造函数,导致此类的getInstance()失败。这意味着一个无名小卒的类不能通过反射来实例化。只是更新了这个问题,以澄清问题。谢谢,我同意。我有一个疯狂的希望,这可能真的有效。事实上,即使使用默认构造函数,实例化内部类也不起作用,至少我希望这样。谢谢你的帮助。你的假设是正确的。我有一个强烈的希望,这可能真的有效,因为它确实是一个抽象的,但在代码中定义的类。如果可能的话,我希望避免在这个范围内创建实际的对象,只使用类引用和按需实例化。你的解决方案当然会奏效,我相信这将是我唯一的选择。谢谢你的回复。
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()
be....servlets.model.extraction.filter.editor.AbstractEnumDefinition$1