java - 从动态生成的类中实例化一个对象

标签 java reflection instantiation dynamically-generated

我目前正在努力实现这样的目标: 基于此类,我尝试创建类 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

我猜这是因为这个类必须事先显式创建,而不是动态引用?

是否有某种解决方案可以让我不必为每个 validator 编写一个类?

感谢您的帮助,

埃里克

最佳答案

我只能做出假设,因为我没有看到您实际使用该类的代码,但您应该检查:http://docs.oracle.com/javase/6/docs/api/java/lang/InstantiationException.html

它提到的一件事是实例化可能会失败,因为该类是一个抽象类(完全合乎逻辑,因为您无法实例化抽象类)。

此外,我不明白为什么您需要返回类然后创建对象。为什么不只定义一个 validator 接口(interface)并让您的方法返回一个 validator 对象。

关于java - 从动态生成的类中实例化一个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9943482/

相关文章:

c# - 从属性而不是名称获取 PropertyInfo

reflection - 如何从 Case 实例中获取 Discriminated Union Type?

c# - 使用 for 循环和条件语句定义方法

PHP:知道实例化是否来自静态方法?

c++ - 类实例化语法

java - 分割id并添加到数组

java - Eclipse 在同一方法中访问变量的奇怪行为

java - Android:尝试实例化一个类

java - 获取用户输入数组中所有值的平均值和总和?

java jlist - AbstractListModel - fireContentsChanged 无法正常工作