java - 如何在java中为供应商或消费者引用私有方法
问题描述
我想重用一段用另一个A类的私有方法编写的代码。像
class A
{
private String method(String data){
return "abcd";
}
}
List myList= getListFromSomeSource();
myList.stream()
.map(A::method)
.collect()....etc
解决方案
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
。
推荐阅读
- amazon-timestream - 在 aws 时间流中处理间隔类型
- dspace - 如何在 Dspace 6 中创建用于添加新提交的组和用于批准提交的组
- imagemagick - 如何使用 imagemagick 填充图像
- reporting-services - SSRS 中的 rsParameterPropertyTypeMismatch 错误
- node.js - MongoError:更新路径'publications.$[pub].updatedAt'会在'publications.$[pub]'处产生冲突
- linux-kernel - 在linux内核模块中拦截系统调用时如何在钩子函数中获取当前工作目录?
- git - 如果提交有两个标签,git describe --match 返回错误的标签名称
- python - 如何使用返回 sql str 数据类型作为 python 列表类型
- python - Django 过滤器 BaseInFilter
- sql - 选择查询缺少所需的结果