gpt4 book ai didi

java - 具有接口(interface)参数的反射和构造函数

转载 作者:行者123 更新时间:2023-11-30 11:53:00 25 4
gpt4 key购买 nike

我正在尝试修改一个类中的私有(private)字段,该类具有一个将接口(interface)作为参数的构造函数。我在实例化这样一个类时遇到问题(它抛出 java.lang.IllegalArgumentException:参数数量错误)。现在,剥离最重要细节的代码如下:

这是我注入(inject)不同 boolean 值的反射代码(默认情况下唯一字段为真,我希望那里为假):

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

}

我应该如何继续将伪参数传递给构造函数的实例?

最佳答案

(可能很明显)您需要传入一个对齐。如果您没有要实例化的非抽象子类,我认为您需要创建一个虚拟子类。

关于java - 具有接口(interface)参数的反射和构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6552849/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com