java - 在 Java 中,是可分配给已声明变量 iff 的表达式。它可以作为用相同类型声明的参数传递吗?

标签 java variable-assignment jls

这个问题的灵感来自 Java 8: Is it possible to assign a method reference to a variable? .

据我目前的理解(可能不完全正确),将 fooMethod(FooType ft) 调用为 fooMethod(myFooInstance) 会导致隐式赋值myFooInstancefooMethod 主体中的局部变量,其名称为 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 Conversion5.3 Method Invocation Conversion对于差异。我看不到任何相关内容。

关于java - 在 Java 中,是可分配给已声明变量 iff 的表达式。它可以作为用相同类型声明的参数传递吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25776804/

相关文章:

java - 关于传统解释器、编译器和 JIT 编译器/解释器的说明

java - 使用 Scanner 类的问题

java - 如何使用像素着色器实现流畅的文字?

C++11。是否可以这样做 : string foo = cout << (. 00000023)*(.00000023) << endl; -精确

javascript - 带 block 的常量声明

java - 解决类型推断时对Exception的约束

java - 在哪里定义 JRE_HOME vaiable 系统变量或用户变量?

perl - 在 Perl 中分配和测试定义时理解优先级

java - 为什么带有可变参数的 Java 方法被识别为 transient ?

java - 并发代码中赋值运算符的返回值