V dnešním článku si ukážeme, jak lze pomocí nástroje RefactoringNG snadno v celém projektu nahradit volání konstruktoru voláním tovární metody. Mějme třídu Position:

public class Position {
private int x;
private int y;

public Position(int x, int y) {
this.x = x;
this.y = y;
}
...
}

Doposud jsme vytvářeli instance třídy Position voláním konstruktoru, nyní však chceme přejít k tovární metodě. Přidáme tedy třídu Builder s tovární metodou:

public class Builder {

static Position create(int x, int y) {
...
}
}

Náhradu volání konstruktoru za volání tovární metody popíšeme v RefactoringNG následujícím pravidlem:

// new Position(<args>) -> Builder.create(<args>)
NewClass {
null,
List<Tree>,
Identifier [name: "Position"],
List<Expression> [id: args],
null
} ->
MethodInvocation {
List<Tree> { },
MemberSelect [identifier: "create"] {
Identifier [name: "Builder"]
},
List<Expression> [ref: args]
}

V NetBeans pak stačí tuto refaktorizaci provést a je hotovo. A nebojte se, před vlastní změnou zdrojáku vám NetBeans ukážou, jaké změny hodlají provést a změny provedou jen s vaším souhlasem.

Máte nějaké zkušenosti s RefactoringNG? Napište mi o tom! Rád si přečtu, k čemu jste RefactoringNG použili, co vám na něm vyhovuje a co postrádáte.