Прошу уточнить какой вариант инициализации является наиболее хорошей практикой. Если ни один из них не является хорошей, то прошу привести свой пример. Конкретно интересует пример инициализации полей объектов из других классов. Спасибо
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
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Здравствуйте, как создать файл на диске С? Когда делаю на D, все работаетКогда изменяю D на С ничего не происходит
Я пытаюсь сделать стек из arraylist'ов, но созданный мною хранит только ссылку на объект, который в него добавили, а я хочу, чтобы он хранил сам...
Есть класс MainActivity2 , в манифесте стоит его parent activity , после нажатии на кнопку activity открывается , но parent activity должен поменяться