Вызов метода после завершения конструктора

Мне нужно вызвать метод после завершения конструктора, и я не знаю, как это сделать. У меня есть этот класс:

Class A {
    public A() {
        //...
    }

    public void init() {
        //Call after the constructor
    }
}

Ответ 1

Вам либо нужно сделать это на стороне клиента, либо так:

A a = new A();
a.init();

или вам нужно будет сделать это в конце конструктора:

class A {
    public A() {
        // ...
        init();
    }

    public final void init() {
        // ...
    }
}

Второй способ не рекомендуется, если вы не сделаете метод закрытым или окончательным.


Другой альтернативой может быть использование метода factory:

class A {
    private A() {  // private to make sure one has to go through factory method
        // ...
    }
    public final void init() {
        // ...
    }
    public static A create() {
        A a = new A();
        a.init();
        return a;
    }
}

Похожие вопросы:

Ответ 2

Для построения объекта вам понадобится статический метод factory, вызовите метод init и, наконец, верните объект:

class A {
    private A() {
        //...
    }

    private void init() {
        //Call after the constructor
    }

    public static A create() {
        A a = new A();
        a.init();
        return a;
    }
}

Заметьте, что я сделал конструктор и метод init() частным, так что к ним можно получить доступ только методом factory. Клиентский код будет создавать объекты, вызывая A.create() вместо вызова конструктора.

Ответ 3

Что ты до сих пор делал? Вы смотрите что-то вроде этого?

  Class A {
        public A() {
            //...
        }

        public void init() {
            //Call after the constructor
        }
    }

     public static void main(String[] args)
    {
    A a = new A();

    a.init();
}

Ответ 4

Я поднимаю некоторые идеи и предоставляю абстрактное решение:

class A {
    protected A() {
        // ...
    }
    protected void init() {
        // ...
    }
    public static <T extends A> T create(Class<T> type) {
        try {
            T obj = type.newInstance();
            obj.init();
            return obj;
        } catch (ReflectiveOperationException ex) {
            System.err.println("No default constructor available.");
            assert false;
            return null;
        }
    }
}

Ответ 5

Как это сделать:

Class A {
    public A() {
        // to do
        init();
    }

    public void init() {
        //Call after the constructor
    }
}

Ответ 6

Почему бы не это:

Class A {
    public A() {
        //... Do you thing
        this.init();
    }

    public void init() {
        //Call after the constructor
    }
}