Этот вопрос был вдохновлен Java 8: Is it possible to assign a method reference to a variable?.В Java это выражение, присваиваемое объявленной переменной iff. он может быть передан как параметр, объявленный с тем же типом?
В настоящее время я понимаю (который не может быть полностью прав), вызов, скажем fooMethod(FooType ft)
в fooMethod(myFooInstance)
вызывает неявное назначение myFooInstance
к локальной переменной внутри тела fooMethod
«s, чье имя ft
, и тип которого объявляется как FooType
. Ясно, что в этом случае я мог бы также присвоить поле или локальную переменную, тип которой FooType
, например, в классе с объявленным полем private FooType fooField
с использованием this.fooField = myFooInstance;
.
Однако при сканировании JLS 8.4.1 нет упоминания о назначении при работе с параметрами метода. JLS 5.3 аналогичным образом не упоминает о назначении, по крайней мере, с начальным чтением этого раздела.
Итак, являются ли правила для типичной типизации и используют их как в строгом вызове, так и в контексте назначения? (или, является ли значение, присваиваемое параметру метода , если и только если присваивается переменной поля/локальной переменной с тем же объявлением?)
(в том же декларации подразумевается параметр field/local /, который равен не является окончательным, и видимость/доступность полей не учитывается для целей данного вопроса)
Edit:
FooType
не обязательно конкретный класс, но инструмент Перефразируя мой вопрос. Это может быть функциональный интерфейс, простой интерфейс, прокси-класс, примитив и т. Д.
Чтобы немного перефразировать, есть ли значение (или возвращаемое значение конструктора функций/языка, возвращающее значение) , которые могут быть назначены:
FooType ft;
или переданы
myMethod(FooType ft){ ...
, но не как для некоторые выбор типа для FooType (который будет выступать в качестве контрпример а и ответьте «нет»).
Включая небольшой демонстрационный футляр вместо простого объяснения, было бы хорошо. – user2864740
@ user2864740 Я ищу, чтобы найти существование или отсутствие такой ситуации, когда назначение переменной не означает возможность передать это значение вместо метода или наоборот. У меня нет конкретного примера, так как мой вопрос пытается найти, существует ли он или нет. – hexafraction
Я думаю, вы должны уточнить, что вы просите. Даже если код не является синтаксически правильным, вы должны показать, что именно вы просите. Я вижу две или три разные (очень разные) вещи, которые вы подразумеваете, и я не уверен, каков ваш реальный вопрос. Раздел 15.12.4.5 JLS рассказывает об активационных кадрах и копирует значения параметров, если это все, что вы ищете. – markspace