gpt4 book ai didi

java - 为什么 getDeclaredMethod 不适用于与特定方法相关的参数?

转载 作者:行者123 更新时间:2023-12-01 12:28:40 25 4
gpt4 key购买 nike

我有接口(interface):

public interface Car{
public void drive();
}

实现汽车的类:

public class SuperCar implements Car{
@Override
public void drive(){

}
}

以及使用 Car 作为方法参数的类

public class CarDealer{
public void sellCar( Car car)
}

我不想使用 getDeclaredMethodSuperCar 作为参数来调用 sellCar 方法,但由于不同的原因,它找不到它参数类型(Car vs SuperCar)

public sellCarTest(){
SuperCar superCar = new SuperCar();
CarDealer carDealer = new CarDealer();
Class dealer = CarDealer.class;
Class[] args = Class[1];
args[0] = superCar.getClass();
Method m = dealer.getDeclaredMethod("sellCar", args);
m.setAccessible(true);
m.invoke(carDealer, superCar);
}

编辑

实际上我已经看到一段代码粘贴在接受的答案中,但它仍然没有给我正确的答案。

我在这里找到了答案 Testing private method using power mock which return list of Integers

最佳答案

如果您查看 Class 类的 java 源代码,您可以看到它比较为获取方法而给出的参数的方式

private static boolean arrayContentsEq(Object[] a1, Object[] a2) {
if (a1 == null) {
return a2 == null || a2.length == 0;
}

if (a2 == null) {
return a1.length == 0;
}

if (a1.length != a2.length) {
return false;
}

for (int i = 0; i < a1.length; i++) {
if (a1[i] != a2[i]) {
return false;
}
}

return true;
}

您可以快速检查

    Object X = P.class;
Object Y = Q.class;// Q implements P
System.out.println(X == Y);

将始终打印false。所以你不会找到任何带有这样的参数的方法

关于java - 为什么 getDeclaredMethod 不适用于与特定方法相关的参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26121681/

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