我有接口(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)
}
我不想使用 getDeclaredMethod 和 SuperCar 作为参数来调用 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/