Xel*_*eli 30 java lambda java-8 method-reference
在java中使用map函数时,我可以执行以下操作:
import com.example.MyClass;
someStream.map(MyClass::myStaticMethod)
Run Code Online (Sandbox Code Playgroud)
但是在我的项目中我们有时会使用静态导入,当导入是静态的时候如何引用myStaticMethod呢?
我认为这会起作用,但它不会:
import static com.example.MyClass.myStaticMethod;
someStream.map(myStaticMethod); //does not compile
Run Code Online (Sandbox Code Playgroud)
为什么这不起作用?我是否仍然坚持使用第一个例子或是否有其他解决方案.
NPE*_*NPE 29
让我们看看Java语言规范的相关部分,15.13.方法参考表达式.
它列出了以下创建方法引用的方法:
MethodReference:
ExpressionName :: [TypeArguments] Identifier
ReferenceType :: [TypeArguments] Identifier
Primary :: [TypeArguments] Identifier
super :: [TypeArguments] Identifier
TypeName . super :: [TypeArguments] Identifier
ClassType :: [TypeArguments] new
ArrayType :: new
Run Code Online (Sandbox Code Playgroud)
请注意,所有这些都包含::令牌.
由于参数someStream.map(myStaticMethod)不包括::,因此它不是有效的方法引用.
这表明您确实需要导入MyClass(可能除了静态导入之外,如果这是您的偏好)并将方法引用为MyClass::myStaticMethod.
| 归档时间: |
|
| 查看次数: |
1827 次 |
| 最近记录: |