这个问题的灵感来自 Java 8: Is it possible to assign a method reference to a variable? .
据我目前的理解(可能不完全正确),将 fooMethod(FooType ft)
调用为 fooMethod(myFooInstance)
会导致隐式赋值myFooInstance
到 fooMethod
主体中的局部变量,其名称为 ft
,其类型声明为 FooType
。显然,在这种情况下,我还可以将 myFooInstance
分配给类型为 FooType
的字段或局部变量,例如,在声明字段为 private 的类中FooType fooField
,使用 this.fooField = myFooInstance;
。
但是扫描JLS 8.4.1,在处理方法参数时并没有提到赋值。 JLS 5.3 同样没有提到可分配性,至少在初步阅读该部分时是这样。
那么,在严格调用和赋值上下文中,变量类型和使用的规则是否相同? (或者,是否可以将值分配给方法参数当且仅当它可以分配给具有相同声明的字段/局部变量?)
(相同的声明意味着字段/本地/参数不是最终的,并且出于此问题的目的不考虑字段的可见性/可访问性)
编辑:
FooType
不一定是具体类,而是表达我的问题的工具。它可以是功能接口(interface)、普通旧接口(interface)、代理类、原语等。
换句话说清楚一点,是否有一个值(或函数调用的返回值/返回值的语言构造)可以分配给:
FooType ft;
或传递给
myMethod(FooType ft){ ...
但不是两个 某些 FooType 的类型选择(这将充当反例并使答案为“否”)。
最佳答案
您需要比较 5.2 Assignment Conversion和 5.3 Method Invocation Conversion对于差异。我看不到任何相关内容。
关于java - 在 Java 中,是可分配给已声明变量 iff 的表达式。它可以作为用相同类型声明的参数传递吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25776804/