Страницы

Поиск по вопросам

вторник, 28 января 2020 г.

Замена конструкторов статическим методом генерации

#java #конструктор


Прочел что можно заменить конструктор статическим методом генерации.

У меня в классе есть два приватных поля

private String one,
и 
private String two,


и нужно создать два конструктора разных конструктора для этих разных переменных.
компилятор ругается на одинаковую сигнатуру.

можете подсказать, как это можно решить с помощью статического метода генерации.
    


Ответы

Ответ 1



public class User { private String username; private String email; private User(String username, String email) { this.username = username; this.email = email; } public static User buildWithEmail(String email){ return new User(null, email); } public static User buildWithUsername(String username){ return new User(username, null); } }

Ответ 2



Возможно стоит использовать шаблон проектирования builder. В отдельном классе задаем поля one, two с помощью сеттеров и затем методом build будет создаваться требуемый экземпляр класса Например: public class MyClassNameBuilder { private String one; private String two; public MyClassNameBuilder withOne(String one) { this.one = one; return this; } public MyClassNameBuilder withTwo(String two) { this.two = two; return this; } public MyClassName build() { return new MyClassName() ... используем one, two в конструкторе или с помощью сетеров } }

Ответ 3



Могу предложить 4 варианта: Изменение статических полей класса в статическом блоке инициализации. Конструктор (String, String) Конструктор (String, Enum) Инициализация двойными скобками Стоит отметить, что Double Brace можно считать хорошей альтернативой шаблону проектирования Builder, но увлекаться в его применении не стоит (Подробнее...) ~ 5. Можете капнуть в сторону вложенных классов. Java Code (Main.java) public class Main { public static void main(String[] arg){ Example example1 = new Example("one", Example.Method.ONE); Example example2 = new Example("one", "two"); Example example3 = new Example(){{ setOne("one"); setTwo("two"); }}; } } Java Code (Example.java) public class Example { private static String one; private static String two; static { one = "one"; two = "two"; } public enum Method{ ONE, TWO } Example(){ // PASS } Example(String text, Method method){ if (method == Method.ONE){ Example.two = text; } else if (method == Method.TWO){ Example.one = text; } else { throw new IllegalArgumentException("..."); } } Example(String one, String two){ Example.one = one; Example.two = two; } public static void setOne(String one) { Example.one = one; } public static String getOne() { return one; } public static void setTwo(String two) { Example.two = two; } public static String getTwo() { return two; } }

Комментариев нет:

Отправить комментарий