gpt4 book ai didi

java - 使用 TreeMap 作为 Person 对象类中的属性

转载 作者:行者123 更新时间:2023-12-02 10:51:57 24 4
gpt4 key购买 nike

按如下方式编写代码是否是错误的做法?我希望能够在我的人员类中存储一封电子邮件,该类还包含电子邮件的类型(工作、个人等)。我决定为此使用 TreeMap。我知道将所有变量设为私有(private)并使用 getter 和 setter 来操作它们是一种很好的做法,但是直接使用 TreeSet 方法(而不是在 Person 类中使用我自己的方法)来操作 TreeSet 是错误的吗?换句话说,这是一种有效且可接受的方式吗?该代码似乎工作正常。

public class Person {
private String firstName;
private String lastName;
private String note;
TreeMap<String, String> phoneNum = new TreeMap<String, String>();

// Assume constructor method contains firstName & lastName and there are
// getters and setters for both
}

public class MainDriver {
public static void main(String[] args) {
Person p1 = new Person("John", "Smith");

p1.phoneNum.put("jsmith@gmail.com", "School");
p1.phoneNum.put("jsmith19@gmail.com", "Personal");

Person p2 = new Person("Sam", "Johnson");

p2.phoneNum.put("samjohn@gmail.com", "Personal");
p2.phoneNum.put("samjohnson", "Work");

System.out.println(p1.phoneNum);
System.out.println(p2.phoneNum);
}
}

Output:
{jbillingham@gmail.com=Personal, jebillingham3@gmail.com=School}
{samsamyoussef=Work, samyou@gmail.com=Personal}

最佳答案

这并不可怕,但它启用了功能嫉妒(代码气味,对象直接使用其他对象的字段)。

问题是您只希望能够向 Person 添加电子邮件地址,但实际上您公开了 TreeMap 的所有操作。诸如 ceilingKeytailMapremove 等方法。为了限制可以执行的操作,您应该完全封装该字段并提供显式方法。

关于java - 使用 TreeMap 作为 Person 对象类中的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46697971/

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