Правильный термин - «дескриптор прямого метода», чтобы подчеркнуть тот факт, что существует прямая связь с членом класса. Или, как написано в документации :
A дескриптор прямого метода представляет метод, конструктор или поле без каких-либо промежуточных привязок аргументов или других преобразований.
Термин «связанный» скорее предполагает, что существуют предварительно связанные значения параметров или связанный получатель, которые больше не будут соответствовать простому объекту Reflection.
Java 8 позволяет получить член из MethodHandle
через MethodHandles.Lookup.revealDirect(…)
:
public class Tmp {
public static void main(String[] args) throws ReflectiveOperationException {
MethodHandles.Lookup lookup = MethodHandles.lookup();
MethodHandle mh = lookup
.findStatic(Tmp.class, "main", MethodType.methodType(void.class, String[].class));
Method method = lookup.revealDirect(mh).reflectAs(Method.class, lookup);
System.out.println(method);
}
}
Он ограничен объектами Reflection, совместимыми с контекстом, описанным предоставленным вами объектом Lookup
, т. Е. Он будет работать, когда попытка поиска того же члена по имени и типу будет успешной с этим объектом поиска.