首页 > 解决方案 > 如何在java中为供应商或消费者引用私有方法

问题描述

我想重用一段用另一个A类的私有方法编写的代码。像

class A
{
  private String method(String data){
return "abcd";
}
}

List myList= getListFromSomeSource();
myList.stream()
.map(A::method)
.collect()....etc

标签: javajava-8reference

解决方案


private如果类实现不提供这样的选项并且该实现不能被修改,那么访问类的方法的唯一方法是通过反射。

假设method类的函数A有一个String返回类型,一个简单的方法是

public static String invokeMethod(A object, String data) throws Exception {
  Method method = A.class.getDeclaredMethod(“method”, String.class);
  method.setAccessible(true);
  return (String) method.invoke(object, data);
}

由于所讨论的Class A方法不是静态的,因此需要使用对象引用来访问它,无论是否有反射,例如

A object = new A(); // Create object of type A
String data = “...”; // Specify data input
String result = invokeMethod(object, data); // Call method

A如果无法创建此类类型的对象,或者调用者不想传递invokeMethod对此类对象的引用,则剩下的唯一其他选择实际上是在method外部重写函数Class A


推荐阅读