Как передать частный метод для поставщика или потребителя в Java - PullRequest
1 голос
/ 15 октября 2019

Я хочу повторно использовать фрагмент кода, написанный в методе Private другого класса A. Как и

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

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

1 Ответ

1 голос
/ 15 октября 2019

Единственный способ получить доступ к методу 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...