反射问题:NoSuchMethodException <init> ...specification.SearchCriteria, [Ljava.lang.String;)

Reflection issue: NoSuchMethodException <init> ...specification.SearchCriteria, [Ljava.lang.String;)

嗯,NoSuchMethodException 通常是不言自明的。不幸的是,就我而言,我什至猜不出为什么会出现这样的错误。

我正在处理其他开发人员的代码,我必须维护它。它的设计考虑了规范模式。为了使搜索引擎非常通用,基本上,从客户端传递到其余服务的任何字符串都会被拆分以构建搜索条件。

当执行 "clazzSpec.getDeclaredConstructor(SearchCriteria.class, String[].class).newInstance(param);" 我得到

java.lang.NoSuchMethodException: br.com.mycompany.specification.SomethingSpecification.<init>(br.com.mycompany.specification.SearchCriteria, [Ljava.lang.String;)

看下面的图,我看不出漏了什么

搜索条件:

public class SearchCriteria {

    private String key;
    private String operation;
    private Object value;

    public SearchCriteria(String key, String operation, Object value) {
        this.key = key;
        this.operation = operation;
        this.value = value;
    }

    public String getKey() {
        return key;
    }

    public void setKey(String key) {
        this.key = key;
    }

    public String getOperation() {
        return operation;
    }

    public void setOperation(String operation) {
        this.operation = operation;
    }

    public Object getValue() {
        return value;
    }

    public void setValue(Object value) {
        this.value = value;
    }

}

SomethingSpecification

public class SomethingSpecification extends Specification<Something> {

    public SomethingSpecification(SearchCriteria criteria) {
        super(criteria);
    }

    @Override
    public Predicate toPredicate(Root<Something> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
        switch (criteria.getOperation()) {
        case "=":
...
        }
        return super.toPredicate(root, query, builder);
    }

}

反射代码查找具有两个参数的构造函数:SearchCriteriaString[]。但是 SomethingSpecification 的唯一构造函数只有一个参数。