Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Code Block
String name;

void checkName(String name) throws IllegalArgumentException {
	// no name can be less than two characters
	if (name.length < 2) {
		throw new IllegalArgumentException("The name is too short, it must be at least two characters");
	}
	// a name can only contain letters, spaces and hyphens
	for (int i = 0; i < name.length(); i++) {
		char c = name.charAt(i);
		if (! (Character.isLetter(c) || c == ' ' || c == '-')) {
			throw new IllegalArgumentException("'" + c + "' is an illegal character, a name can only contain letters, space or hyphens");
		}
	}
}

void setName(String name) {
	checkName(name);
	this.name = name;
}
PlantUML Macro
class Person {
	String name
	void checkName(String)
	void setName(String) throws IllegalArgumentException
} 

 

Siden valideringsmetoden ikke lenger returnerer boolean, har vi endre navnet fra å begynne med "is", så nå heter den checkName. Og siden den utløser unntaket, kan setteren forenkles: If'en er unødvendig, dersom checkName utløser unntaket vil ikke tilordningen bli utført og vi trenger ingen if-setning. Ulempen med denne varianten er at det kompliserer andre klasser, siden de ikke kan sjekke verdien gyldigheten av et navn uten å måtte bruke try/catch. Under vises to varianter som løser dette problemet. Den venstre varianten lar valideringsmetoden returnere en meldingstekst eller null, dersom alt er ok. Den høyre varianten lar valideringsmetoden ta et ekstra argument som angir om true/false skal returneres istedenfor å utløse et unntak.

...