Почему в Java следующая ссылка на метод незаконна?JAVA

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

Сообщение Anonymous »

У меня есть некоторое замешательство относительно того, как работают ссылки на методы.
Ниже приведен пример из JLS 15.13.1:

Пример двусмысленности:

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

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;
// Error: instance method size()
// or static method size(Object)?
}
}
Я пытаюсь проанализировать этот код, чтобы увидеть, каким должен быть вызов метода, на который ссылается ссылка на метод.
Согласно JLS 15.13.1( Сохраните соответствующие части.):

• Сначала определяется тип для поиска:
– Если метод ссылочное выражение имеет вид

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

ReferenceType ::[TypeArguments] Identifier
тип для поиска является результатом
преобразования захвата (§5.1.10), примененного к ReferenceType.

Таким образом, Типом для поиска является тип класса C.

• Во-вторых, для заданного типа целевой функции с n параметрами набор Идентифицированы
потенциально применимые методы:
– если выражение ссылки на метод имеет форму

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

ReferenceType :: [TypeArguments] Identifier
,
то потенциально применимые методы:
› методы-члены типа для поиска, который будет потенциально
применимо
(§15.12.2.1) для вызова метода, имя которого
Идентификатор, имеет разрядность n, имеет аргументы типа TypeArguments и появляется
в том же классе в качестве выражения ссылки на метод; плюс
› методы-члены искомого типа, которые потенциально
применимы для вызова метода с именем Identifier, имеющего арность имеет аргументы типа TypeArguments и находится в том же классе
, что и выражение ссылки на метод.

Таким образом, методы имеют размер int () и int size(Object arg) все потенциально применимы.
Правила потенциально применимые также требуют, чтобы параметры и аргументы были потенциально совместимыми. Здесь нет необходимости, потому что типы аргументов для вызова не упомянуты?
Спасибо, что прочитали и ответили.

Подробнее здесь: https://stackoverflow.com/questions/791 ... ce-illegal
Ответить

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

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

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

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

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