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