在 Person 对象 class 中使用 TreeMap 作为 属性
Using a TreeMap as a property in a Person object class
按如下方式编写我的代码是错误的做法吗?我希望能够在我个人 class 中存储一封电子邮件,其中还包含电子邮件的类型(工作、个人等)。我决定为此使用 TreeMap。我知道将所有变量设为私有并使用 getter 和设置器来操纵它们是一种很好的做法,但是直接使用 TreeSet 方法而不是我自己的方法来操纵我的 TreeSet 是错误的吗人 class?换句话说,这是一种有效的可接受方式吗?代码似乎工作正常。
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
的所有操作。 ceilingKey
、tailMap
和 remove
等方法。为了限制可以执行的操作,您应该完全封装该字段并提供显式方法。
通常使用 ArrayList
但我猜你使用 TreeMap
的原因是你希望每个电子邮件或 phone 号码(键)有一个 ContactType(最好使用枚举).
例如,个人和学校不能同时使用 jbillingham@gmail.com。
此外,最好将 phoneNum
设为私有并向您的 Person class.
添加 addContact/ removeContact
方法
按如下方式编写我的代码是错误的做法吗?我希望能够在我个人 class 中存储一封电子邮件,其中还包含电子邮件的类型(工作、个人等)。我决定为此使用 TreeMap。我知道将所有变量设为私有并使用 getter 和设置器来操纵它们是一种很好的做法,但是直接使用 TreeSet 方法而不是我自己的方法来操纵我的 TreeSet 是错误的吗人 class?换句话说,这是一种有效的可接受方式吗?代码似乎工作正常。
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
的所有操作。 ceilingKey
、tailMap
和 remove
等方法。为了限制可以执行的操作,您应该完全封装该字段并提供显式方法。
通常使用 ArrayList
但我猜你使用 TreeMap
的原因是你希望每个电子邮件或 phone 号码(键)有一个 ContactType(最好使用枚举).
例如,个人和学校不能同时使用 jbillingham@gmail.com。
此外,最好将 phoneNum
设为私有并向您的 Person class.
addContact/ removeContact
方法