当前位置:  开发笔记 > 编程语言 > 正文

可以使用方法引用来访问静态方法吗?

如何解决《可以使用方法引用来访问静态方法吗?》经验,为你挑选了1个好方法。

根据:

https://docs.oracle.com/javase/tutorial/java/javaOO/methodreferences.html

看起来它是可能的,但是尝试真正返回编译错误.由于我们无法使用静态方法实现接口,因此它更有意义.

public class SomeClass {

    static public boolean getB(){
        return false;
    }
}

List list = new ArrayList<>();       
list.add(new SomeClass());

// below causes compile error, which I expect, however documentation indicates oherwise
list.stream().filter(SomeClass::getB).collect(Collectors.toList());

这是编译错误:

"此行的多个标记 - 应该以静态方式访问SomeClass类型的方法getB() - Stream类型中的方法过滤器(Predicate)不适用于参数(SomeClass :: getB)"



1> JB Nizet..:

您可以,但方法的返回类型和参数必须与功能接口的唯一方法(Predicate此处)相匹配.

假设你的列表是a List,因为谓词应该基于Somethingas输入返回一个布尔值,如果你的方法定义为

public static boolean getB(Something s)

要么

public static boolean getB(Object o)


它生成的字节码较少,而且通常更易读.我发现`persons.sort(Comparator.comparing(Person :: getLastName).thenComparing(Person :: getFirstName))`非常自然和可读.多于`persons.sort(Comparator.comparing(person - > person.getLastName()).thenComparing(person - > person.getFirstName()))`.甚至更多的东西,如`reduce(Integer :: sum)`而不是`reduce((i1,i2) - > i1 + i2)`.
推荐阅读
郑谊099_448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有