Мне нужно вызвать метод после завершения конструктора, и я не знаю, как это сделать. У меня есть этот класс:
Class A {
public A() {
//...
}
public void init() {
//Call after the constructor
}
}
Мне нужно вызвать метод после завершения конструктора, и я не знаю, как это сделать. У меня есть этот класс:
Class A {
public A() {
//...
}
public void init() {
//Call after the constructor
}
}
Вам либо нужно сделать это на стороне клиента, либо так:
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;
}
}
Похожие вопросы:
Для построения объекта вам понадобится статический метод 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()
вместо вызова конструктора.
Что ты до сих пор делал? Вы смотрите что-то вроде этого?
Class A {
public A() {
//...
}
public void init() {
//Call after the constructor
}
}
public static void main(String[] args)
{
A a = new A();
a.init();
}
Я поднимаю некоторые идеи и предоставляю абстрактное решение:
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;
}
}
}
Как это сделать:
Class A {
public A() {
// to do
init();
}
public void init() {
//Call after the constructor
}
}
Почему бы не это:
Class A {
public A() {
//... Do you thing
this.init();
}
public void init() {
//Call after the constructor
}
}
Если вы хотите вызвать метод ДО конструктора, вы можете использовать блок инициализатора. https://www.geeksforgeeks.org/g-fact-26-the-initializer-block-in-java/
class A {
{
init()
}
public A() {
//todo
}
private final void init() {
//todo
}
}