對於一般成員變量,提供簡單的 getter/setter 封裝即可。但對於集合類,不能這樣做。
class Athlete {
private String name;
public String getName() { return name; }
public void setName(String name) { this.name = name; }
}
add/remove;public class Game {
private Set<Athlete> players = new HashSet<Athlete>(); // 1
public void addPlayer(Athlete one) { // 2
players.add(one);
}
public void removePlayer(Athlete one) { // 2
players.remove(one);
}
public void addPlayers(Set<Athlete> set) { // 3
Iterator<Athlete> iter = set.iterator();
while (iter.hasNext())
addPlayer(iter.next());
}
public void initializePlayers(Set<Athlete> set) { // 3
if (getAttendNumbers() > 0)
players.clear();
players.addAll(set);
}
public Set<Athlete> getAllPlayers() { // 4
return Collections.unmodifiableSet(players);
}
public int getAttendNumbers() { // 5
return players.size();
}
}
這樣封裝可防止外部直接修改集合內容,保證資料一致性與封裝性。