我会这样做:
公共类书籍
{
private final String title;
private final String isbn;
public Book(final String t, final String i)
{
if(t == null)
{
throw new IllegalArgumentException("t 不能为空");
}
if(i == null)
{
throw new IllegalArgumentException("i 不能为空");
}
title = t;
isbn = i;
}
}
我在这里做出以下假设:
1)标题永远不会改变(因此标题是最终的)
2)ISBN 永远不会改变(因此 ISBN 是最终的)
3)没有标题和 ISBN 的书籍是无效的。
考虑一个学生类:
public class Student
{
private final StudentID id;
private String firstName;
private String lastName;
public Student(final StudentID i,
final String first,
final String last)
{
if(i == null)
{
throw new IllegalArgumentException("i 不能为空");
}
if(first == null)
{
throw new IllegalArgumentException("first 不能为空");
}
if(last == null)
{
throw new IllegalArgumentException("last 不能为空");
}
id = i;
firstName = first;
lastName = last;
}
}
必须创建一个具有id、名字和姓氏的学生。学生ID永远不会改变,但人的姓和名可以改变(结婚、因输掉赌博而改名等)。
在决定要使用哪些构造函数时,您确实需要考虑什么是有意义的。很多时候,人们添加set/get方法是因为他们被教导这样做,但往往这是一个坏主意。
不可变类(即带有最终变量的类)比可变类更好。这本书:http://books.google.com/books?id=ZZOiqZQIbRMC&pg=PA97&sig=JgnunNhNb8MYDcx60Kq4IyHUC58#PPP1,M1(《Effective Java》)对不可变性进行了很好的讨论。请看第12和13条。