Во-первых, давайте рассмотрим пример:Я попытался проанализировать этот код, чтобы увидеть, каким должен быть вызов метода, на который ссылается ссылка на метод.
Согласно JLS 15.13.1:Очевидно, тип, который нужно искать, — это тип класса C.
И затем:
• Во-вторых, для заданного типа целевой функции с n параметрами определяется набор
потенциально применимых методов: – Если ссылочное выражение метода
имеет форму ReferenceType :: [TypeArguments]Идентификатор, то потенциально применимыми методами являются: › методы-члены
типа для поиска, которые могут быть потенциально применимы
(§15.12.2.1) для вызова метода, который называет Идентификатор, имеет арность
n, имеет аргументы типа TypeArguments и находится в том же классе, что и
выражение ссылки на метод; плюс › методы-члены типа
для поиска, которые потенциально могут быть применимы для вызова метода
, который называет Identifier, имеет разрядность n-1, имеет аргументы типа
TypeArguments и появляется в тот же класс, что и выражение ссылки на метод.
В соответствии с JLS, теперь предположим, что существует вызов метода: "идентификатор имен имеет арность n, имеет аргументы типа TypeArguments и находится в том же классе, что и выражение ссылки на метод", а затем определяет, является ли этот предполагаемый вызов метода потенциально применимым с двумя методами-членами, появляющимися в классе C.
Они имеют одинаковое имя и одинаковую арность.
И из-за предложения «и появляется в том же классе, что и выражение ссылки на метод», класс, в котором происходит вызов метода, определяется таким образом, чтобы вынести суждение о предложении «Член доступен (§6.6) для класса или интерфейса, в котором появляется вызов метода». (15.12.2.1)
А как насчет совместимости? Он не предоставляет типы аргументов предполагаемого вызова метода.
Как вынести суждение
" Если элемент является методом фиксированной арности с арностью n, арность
вызова метода равна =n, и для всех i (1 ≤ i ≤ n) i-й
аргумент вызов метода потенциально совместим, как
определено ниже, с типом i-го параметра метода."
?(15.12.2.1)
Другими словами, это не просто статический размер int(Object arg). Если у меня тоже есть
Код: Выделить всё
static int size(String arg)Спасибо, что прочитали и ответили.
Я не думаю, что мой вопрос похож на этот. Если только оценивать потенциальную применимость методов-членов и вызовов методов. , спецификации четко написаны. Здесь используются ссылки на методы. Насколько я понимаю, согласно спецификации, метод-член будет сравниваться с предполагаемым вызовом. Однако для этого предполагаемого вызова информации, предоставленной спецификацией, кажется недостаточно.
Подробнее здесь: https://stackoverflow.com/questions/791 ... ce-in-java
Мобильная версия