Как искать потенциально применимые методы для ссылки на метод в Java? [дубликат]JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Как искать потенциально применимые методы для ссылки на метод в Java? [дубликат]

Сообщение Anonymous »

Вопросы, которые я задавал несколько дней назад, были слишком хаотичными, поэтому я хочу здесь более четко выразить свою мысль.
Во-первых, давайте рассмотрим пример:

Код: Выделить всё

interface Fun { R apply(T arg); }
class C {
int size() { return 0; }
static int size(Object arg) { return 0; }
void test() {
Fun f1 = C::size;

}
}
Я попытался проанализировать этот код, чтобы увидеть, каким должен быть вызов метода, на который ссылается ссылка на метод.
Согласно JLS 15.13.1:
Очевидно, тип для поиска — это тип класса C.
И тогда:

• Во-вторых, учитывая целевой тип функции с n параметрами, определяется набор
потенциально применимых методов:
  • Если ссылочное выражение метода
    имеет форму ReferenceType :: [TypeArguments]
    Идентификатор, то потенциально применимыми методами являются:

    член
    методы типа для поиска, которые потенциально могут быть применимы
    (§15.12.2.1) для вызова метода, который называет Identifier, имеет арность
    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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»