在Java中,是一个可赋值给声明的变量iff的表达式。 它可以作为使用相同类型声明的参数传递吗?
这个问题的灵感来自Java 8:是否可以为变量分配方法引用? 。
正如我目前所理解的那样(可能不完全正确),调用fooMethod(FooType ft)
作为fooMethod(myFooInstance)
会导致fooMethod(myFooInstance)
隐式赋值给myFooInstance
的局部变量,其名称为ft
,并且其类型声明为FooType
。 显然,在这种情况下,我还可以将myFooInstance
分配给类型为FooType
的字段或局部变量,例如,在具有声明字段private FooType fooField
,使用this.fooField = myFooInstance;
。
但是,扫描JLS 8.4.1时,在处理方法参数时没有提及赋值。 类似地,JLS 5.3没有提到可分配性,至少对该部分的初始读数是这样。
那么,变量类型的规则是在严格调用和赋值上下文中使用相同的吗? (或者, 当且仅当它可以赋值给具有相同声明的字段/局部变量时,它是否可赋值给方法参数?)
(相同的声明意味着字段/本地/参数不是最终的,并且出于此问题的目的不考虑字段的可见性/可访问性)
编辑:
FooType
不一定是具体的类,而是一个表达我的问题的工具。 它可以是function接口,普通旧接口,代理类,原语等。
要清楚地改写一下,是否有一个值(或函数调用/语言结构返回值的返回值),可以分配给:
FooType ft;
或传递给
myMethod(FooType ft){ ...
但对于FooType的某种类型选择(这将作为反例并使答案为“否”) 并非两者兼而有之 。
您需要比较5.2分配转换和5.3方法调用转换的差异。 我看不到任何相关的东西。