gpt4 book ai didi

java - 找不到兼容的方法 : error while passing object to a method?

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:47:07 26 4
gpt4 key购买 nike

我正在尝试为我们拥有的一些旧遗留代码编写 junit

下面是 DataLogger 类中的方法,我正在为其编写 junit 并使用 jmockit -

private Object[] extractMessageObjects(final Object... objects) {
Object[] result = new Object[objects.length - 1];

System.arraycopy(objects, 0, result, 0, result.length);

return result;
}

所以下面的测试应该可以正常工作。对吧?

@Test
public void testLogDebugWithStackTrace() {
DataLogger logger = DataLogger.getInstance(ClientTest.class);

Object obj[] = new Object[] {1};
Deencapsulation.invoke(logger, "extractMessageObjects", obj);
}

但是我遇到了异常 -

No compatible method found: extractMessageObjects(java.lang.Integer)

我这里有什么问题吗?

最佳答案

在您使用的invoke(..) 方法中,该方法的参数类型是根据您的Object[] 中的元素类型解析的。由于您的包含一个 Integer,jmockit 将尝试找到一个接受 Integer 的方法。它会失败,因为这样的方法不存在。

No compatible method found: extractMessageObjects(java.lang.Integer)

相反,您可以使用接受参数类型的重载方法

Deencapsulation.invoke(new Example(), "extractMessageObjects",
new Class<?>[] { Object[].class }, (Object) new Object[] { 1 });

这样它就可以正确地找到合适的方法,而无需您使用的参数类型的提示。请注意,您必须转换最后一个参数,以便它用作 Deencapsulation.invoke(..) 方法的目标 Object[] 参数中的唯一元素。

关于java - 找不到兼容的方法 : error while passing object to a method?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23171798/

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