To może być kwestia osobistego gustu i przepływu pracy, ale w przypadku, gdy jest coś więcej, uważam, że powinienem zapytać.Java: Różnica między inicjowaniem przez konstruktor i metodą statyczną?
W języku Java, jakie są różnice między tworzeniem instancji za pośrednictwem konstruktora i metodą statyczną (która zwraca instancję)? Weźmy na przykład ten fragment kodu z projektu pracuję nad (napisany przez strony w chwili nadania, więc niektóre skróty i wolności są brane):
Plugin main;
Map<int, int> map;
public Handler(Plugin main) {
this.main = main;
}
public static Handler init(Plugin main) {
Handler handler = new Handler(main);
handler.createMap();
}
public void createMap() {
this.map = Maps.newHashMap();
}
W przypadkach takich jak ten, co by różnica jest między używaniem
Handler handler = new Handler(this);
i
Handler handler = Handler.init(this);
w klasie Plugin, oprócz faktu, że createMap()
działa tylko w tym drugim, ponieważ nie nazywa w konstruktorze?
Aby wyjaśnić, w tym przypadku, Plugin
jest uważana za główną.
Znam wystarczająco dużo składni języka Java, aby móc pisać wtyczki pośrednie, ale nie wystarcza sama Java, aby wiedzieć, jaka jest różnica między tymi dwoma sposobami.
EDYCJA: Na przykład klasa Maps
, którą użyłem do utworzenia Map
używa statycznej metody fabrycznej (mam nadzieję, że używam tego terminu poprawnie) wywołanego przy użyciu klasy zamiast obiektu.
brakowało kodu? – user1428716
Przepraszam; TAK PRZEDSTAWIONY, zanim skończyłem pisać! Musiałem trafić przypadkowo w Tab i nie zdawałem sobie z tego sprawy, dopóki nie spróbowałem nacisnąć Enter, aby wstawić znak nowej linii. Ale cieszę się, że ludzie byli w stanie przeczytać i odpowiedzieć na to, zanim mogłem zakończyć pisanie, chociaż informacje podane w tym czasie były prawie zerowe B-) – ChaoticWeg
"napisane ręcznie w momencie księgowania" - zawsze możesz testuj próbki kodu w [ideone] (http://ideone.com/) (Edytor podświetlania składni dla nich nie byłby zły, gdyby je tworzył, gdyby nie wymagał wcięć z kartami.) – millimoose