在Java中,是一个可赋值给声明的变量iff的表达式.它可以作为使用相同类型声明的参数传递吗?

这个问题的灵感来自
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的差异.我看不出任何相关的东西.

点赞