gpt4 book ai didi

java - 自 Java 8 以来是否有使用 getter 和 setter 的新论点?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:20:28 26 4
gpt4 key购买 nike

正如标题所说,在任何编程语言中,关于 getter 和 setter 的讨论总是很多,Java 也是如此。

问题如下:自从 Java 8 发布以来是否有任何新的争论?

一个已经存在的争论的例子是 getter 和 setter 封装状态,或者它们可以在不改变 API 的情况下改变实现。

最佳答案

是的,有!由于引入了 Java 8 方法引用,正如其名称所示,它们只能与方法一起使用。

考虑以下代码:

class Person {
private String firstName;
private String lastName;

public Person(final String firstName, final String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}

public String getFirstName() {
return firstName;
}

public void setFirstName(String firstName) {
this.firstName = firstName;
}

public String getLastName() {
return lastName;
}

public void setLastName(String lastName) {
this.lastName = lastName;
}

@Override
public String toString() {
return firstName + " " + lastName;
}
}

假设我们想要获得一个包含按姓氏分组的人员列表的 map ,我们只能通过使用以下代码的方法引用来做到这一点:

List<Person> personList = new ArrayList<>();
personList.add(new Person("Shannon", "Goldstein"));
personList.add(new Person("Donnie", "Denney"));
personList.add(new Person("Mark", "Thomas"));
personList.add(new Person("Julia", "Thomas"));
Map<String, List<Person>> personMapping = personList.stream()
.collect(Collectors.groupingBy(Person::getLastName));
System.out.println("personMapping = " + personMapping);

打印出来,格式很好:

personMapping = {
Thomas=[Mark Thomas, Julia Thomas],
Goldstein=[Shannon Goldstein],
Denney=[Donnie Denney]
}

如果我们使用 public 变量,这将有效,因为您无法获得对它们的方法引用,也无法以其他方式引用它们,而不是编写一个完整的-成熟的 lambda,它不是必需的。
(对于好奇的人:需要使用 person -> person.lastName)

此外,请记住,这个答案不同于有人声称如果一个对象需要遵守某个接口(interface),则 必须 使用 getter 和 setter。在此示例中,Person 类不遵循任何接口(interface),但受益于可用的 getter。

关于java - 自 Java 8 以来是否有使用 getter 和 setter 的新论点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22636747/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com