java - 无法使用参数实例化子类

标签 java

我不断收到错误:java.lang.NoSuchMethodException: com.production.workflow.MyWorkflow.<init>(com.production.model.entity.WorkflowEntity)

我有一个期望 WorkflowEntity 的构造函数所以我不明白为什么它说 NoSuchMethod 。构造函数继承是否存在阻止其实例化的问题?

我的实例化工厂:

public static Workflow factory(WorkflowEntity workflowEntity) {
    try {
        Class<?> clazz = Class.forName(workflowEntity.getClassName()).asSubclass(Workflow.class);
        Constructor c = clazz.getConstructor(WorkflowEntity.class);
        Object workflowClass = c.newInstance(clazz);
        return (Workflow) workflowClass;
    } catch (Exception e) {
        e.printStackTrace();
        logger.severe("Unable to instantiate "+workflowEntity.getClassName()+" class: " + e.getLocalizedMessage());
    }

    return null;
}

工作流程类:

public class MyWorkflow extends Workflow {
//no constructors

扩展类:

abstract public class Workflow {
    protected static final Logger logger = Logger.getLogger(Workflow.class.getName());

    private WorkflowEntity entity;
    protected WorkflowProcess workflowProcess;

    @Autowired
    private WorkflowProcessService workflowProcessService;

    /* Don't use this one */
    public Workflow() { }

    /* Default constructor */
    public Workflow (WorkflowEntity entity) {
        this.entity = entity;

        //get first workflow process
        //@todo this should factor in rule, for multiple starting points
        for (WorkflowProcessEntity workflowProcessEntity : entity.getWorkflowProcesses()) {
            workflowProcess = WorkflowProcess.factory(workflowProcessEntity);
            break;
        }
    }

最佳答案

您的代码中有两个问题:

  1. 构造函数不会自动被子类继承。您需要将 MyWorkflow(WorkflowEntity) 构造函数添加到 MyWorkflow 类中。
  2. 您的新实例调用需要使用 workflowEntity 实例(而不是您现在提供的类实例)

这里:

class MyWorkflow extends Workflow {

    public MyWorkflow() {
        super();
    }

    public MyWorkflow(WorkflowEntity entity) {
        super(entity);
    }
}
public static Workflow factory(WorkflowEntity workflowEntity) {
    try {
        Class<?> clazz = Class.forName(workflowEntity.getClassName())
                .asSubclass(Workflow.class);
        Constructor<?> c = clazz.getConstructor(WorkflowEntity.class);
        Object workflowClass = c.newInstance(workflowEntity);
        return (Workflow) workflowClass;
    } catch (Exception e) {
        e.printStackTrace();
    }

    return null;
}

关于java - 无法使用参数实例化子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15907697/

相关文章:

java - 如何将多个值添加到 Map 中的同一个键

java - Twitter4j.获取来自国家/地区的用户

java - 用Java制作一个表单

java - Java 内存模型中的 happens-before 规则

java - 如何阻止 vaadin 窃取所有 url-patterns(并与 spring mvc 一起玩)

java - 如何在 java 中为 excel 文件中的列和行添加颜色?

java - Spring HibernateDaoSupport 创建多个 session

java - Android SQLite : get number of rows in a table?

java - 查找当前用户的路径

java - 当参数是 Object[] 类型时通过反射调用方法