Skip to content

Instantly share code, notes, and snippets.

@oleg
Created April 30, 2018 09:50
Show Gist options
  • Save oleg/ae23639fcdb4b749bb74553f9b8464b6 to your computer and use it in GitHub Desktop.
Save oleg/ae23639fcdb4b749bb74553f9b8464b6 to your computer and use it in GitHub Desktop.
setters in constructor
class Character {
private String name;
public void setName(String name) {
this.name = name;
}
}
class Enemy extends Character {
public Enemy(String name) {
this.setName(name); //this is dangerous
}
}
//somewhere far away
class EvalEnemy extends Enemy {
private Integer evalLevel;
public EvalEnemy(String name, int evalLevel) {
super(name);
this.evalLevel = evalLevel;
}
@Override
public void setName(String name) {
if (canBeNamed()) {
super.setName(name);
}
}
private boolean canBeNamed() {
return evalLevel > 10;
}
}
public class Main {
public static void main(String[] args) {
EvalEnemy oleg = new EvalEnemy("oleg", 10); //fails with NullPointerException
System.out.println(oleg);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment