Я пытаюсь изменить приватное поле внутри класса, у которого есть конструктор, принимающий интерфейс в качестве аргумента.У меня возникают проблемы при создании экземпляра такого класса (он выдает java.lang.IllegalArgumentException: неверное количество аргументов).Теперь код, выделенный для наиболее важных деталей, выглядит следующим образом:
Вот мой код отражения, чтобы ввести другое логическое значение (уникальное поле по умолчанию true, я хочу false там):
private void modifySitePatterns() {
try {
Thread thread = Thread.currentThread();
ClassLoader classLoader = thread.getContextClassLoader();
Class<?> classToModify = Class.forName(
"dr.evolution.alignment.SitePatterns", true, classLoader);
Constructor<?>[] constructors = classToModify
.getDeclaredConstructors();
Field[] fields = classToModify.getDeclaredFields();
Object classObj = constructors[0].newInstance(new Object[] {}); //this throws the exception
for (int i = 0; i < fields.length; i++) {
if (fields[i].getName() == "unique") {
System.out.println(i);
fields[i].setAccessible(true);
fields[i].set(classObj, false);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}// END: modifySitePatterns()
Вот класс, который я пытаюсь изменить:
public class SitePatterns implements SiteList, dr.util.XHTMLable {
//omitted
private boolean unique = true;
public SitePatterns(Alignment alignment) {// constructor 0
this(alignment, null, 0, 0, 1);
}
}
И аргумент, который доставляет мне неприятности:
public interface Alignment extends SequenceList, SiteList {
//omitted
public abstract class Abstract implements Alignment {
}
//omitted
}
Как мне продолжить передачу ложного аргумента вэкземпляр конструктора?