这个问题的灵感来自
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不一定是具体的类,而是一个表达我的问题的工具.它可以是功能接口,普通旧接口,代理类,原语等.
要清楚地改写一下,是否有一个值(或函数调用/语言结构返回值的返回值),可以分配给:
FooType ft;
或传递给
myMethod(FooType ft){ ...
但对于FooType的某种类型选择(这将作为反例并使答案为“否”)并非两者兼而有之.
最佳答案 您需要比较
5.2 Assignment Conversion和
5.3 Method Invocation Conversion的差异.我看不出任何相关的东西.