Проблема отражения: NoSuchMethodException <init>...pecification.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);
}
}
1 ответ
Код отражения ищет конструктор с двумя аргументами: SearchCriteria
и String[]
, Но единственный конструктор для SomethingSpecification
только один аргумент.