Прошу уточнить какой вариант инициализации является наиболее хорошей практикой. Если ни один из них не является хорошей, то прошу привести свой пример. Конкретно интересует пример инициализации полей объектов из других классов. Спасибо
1-ый вариант:
public class A { String text; int count;}
public class B { public static void main(String[]args)
{
A a= new A();
a.text="Text";
a.count=10;
}
}
2-ой вариант:
public class A {
String text;
int count;
public A(String text; int count){
this.text=text;
this.count=count;
}
}
public class B { public static void main(String[]args)
{
A a= new A("Text",10);
}
}
3-ий вариант:
public class A { String text; int count;
public void setText (String text){this.text=text};
public String getText(){return text};
public void setCount (int count){this.count=count};
public String getCount(){return count};
}
public class B { public static void main(String[]args)
{
A a= new A();
a.setText("Text");
a.setCount(10);
}
}
Для большинства случаев самым лучшим вариантом является вариант внедрения зависимостей через конструктор. Финализированные поля дают некоторую защиту при многопоточном исполнении, внедрение зависимостей через конструктор хорошо согласуется с принципом Dependency Inversion (Inversion Of Control) и считается хорошей практикой. Широко используется в популярном фреймворке Spring, не мешает Unit-тестированию и работе с заглушками (Mocking). Подобный код обладает более слабой связанностью по парадигме SOLID. Пример кода ниже:
public class SomeClass {
private final SomeInterface someImplementation;
private final OtherInterface otherImplementation;
@Autowired // or without autowired if you don't use Spring
public SomeClass(SomeInterface someImplementation, OtherInterface otherImplementation){
this.someImplementation= someImplementation;
this.otherImplementation= otherImplementation;
}
// class functionality here
}
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости