- 1
this.network = new Network(this);
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
−48
this.network = new Network(this);
Я ниасилил DI.
хуита 28.12.2016 09:36 # 0
public Controller(){
this.network = new Network(this);
}
bormand 28.12.2016 17:23 # +4
guest 27.01.2017 06:25 # −2
http://ideone.com/AuZBDE
roman-kashitsyn 27.01.2017 12:23 # 0
Код не компилируется. Да и не будет всё норм: объект в жавке не стоит публиковать до завершения конструктора. Вдруг network стартует в конструкторе тред, в котором вызывает методы Controller. Читай про безопасную публикацию объектов в жаве.http://vlkan.com/blog/post/2014/02/14/java-safe-publication/
Fike 28.12.2016 12:29 # 0
huesto 28.12.2016 16:57 # 0
bayan 28.12.2016 17:01 # +1
huesto 28.12.2016 18:17 # 0
bormand 28.12.2016 17:09 # +3
bayan 28.12.2016 17:20 # 0
bormand 28.12.2016 17:21 # 0
bayan 28.12.2016 17:39 # 0
но лучше конечно автоинжект в конструктор
bormand 28.12.2016 17:42 # +1
barop 29.12.2016 04:44 # 0
Важно что он собирает тебе всю деревяшку объектов
Внутри Network может еще 140 инжектов быть, и 3 из них в конструктор
bormand 29.12.2016 18:22 # 0
DI может одному объекту заинжектить SimpleNetwork, второму - AdvancedNetwork, а третьему - вообще NetworkMock. Локатор так не сможет, т.к. он не знает, куда пойдёт Network о котором его попросили.
roman-kashitsyn 29.12.2016 18:28 # +2
Он может посмотреть в Thread.currentThread().getStackTrace() и решить
bormand 29.12.2016 18:49 # 0
bayan 29.12.2016 19:34 # 0
Фу, нет.
надо кинуть эксепшен, сразу жего поймать, и посмотреть стек трейс
roman-kashitsyn 29.12.2016 19:59 # +2
ProctologistForYou 29.12.2016 22:50 # 0
хуита 28.12.2016 17:35 # +4
Her 28.12.2016 20:10 # +1
inkanus-gray 28.12.2016 20:11 # +4
bormand 28.12.2016 20:19 # +7
Надо в статический анализатор правило такое добавить.
CHayT 28.12.2016 20:40 # +7