Java stream API: 映射字段没有 getter 语法

Java stream API: map field without getter syntax

class Person {
    public String name;
    public String getName() { return name; }
}

通过 lambda 访问流 API 中的字段是否有特殊的语法糖?我看到了:

List<Person> persons;
persons.stream().map(Person::getName).collect(Collectors.toList());
persons.stream().map(p -> p.name).collect(Collectors.toList());

像这样的东西怎么样(这不起作用,我知道):

persons.stream().map(Person::name).collect(Collectors.toList());

字段访问没有类似于方法引用的语法。有时那样会很方便。

动机

没有理由的事实是 Java 将字段视为方法有点奇怪。这也会给重载带来困难,因为字段和方法可以具有相同的名称。

解决方法

如问题文本中的示例所示,为字段提供 getter。或者改用 lambda 表达式。像这样:

someMethod(obj -> obj.someField);