我需要在构造函数结束后调用一个方法,我不知道该怎么做。 我有这门课:
Class A {
public A() {
//...
}
public void init() {
//Call after the constructor
}
}
答案 0 :(得分:13)
你必须在客户端这样做:
A a = new A();
a.init();
或者您必须在构造函数的末尾执行此操作:
class A {
public A() {
// ...
init();
}
public final void init() {
// ...
}
}
不推荐使用第二种方法,除非您将方法设为私有或最终方法。
另一种选择可能是使用工厂方法:
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;
}
}
相关问题:
答案 1 :(得分:3)
您需要一个静态工厂方法来构造对象,调用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()
方法设为私有,因此只能通过工厂方法访问它们。客户端代码通过调用A.create()
而不是调用构造函数来创建对象。
答案 2 :(得分:1)
到目前为止你做了什么?你看起来像这样吗?
Class A {
public A() {
//...
}
public void init() {
//Call after the constructor
}
}
public static void main(String[] args)
{
A a = new A();
a.init();
}
答案 3 :(得分:1)
我提出了一些想法并提供了一个可抽象的解决方案:
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;
}
}
}
答案 4 :(得分:1)
如果要在构造函数之前调用方法,则可以使用初始化程序块。 https://www.geeksforgeeks.org/g-fact-26-the-initializer-block-in-java/
class A {
{
init()
}
public A() {
//todo
}
private final void init() {
//todo
}
}
答案 5 :(得分:0)
怎么回事:
Class A {
public A() {
// to do
init();
}
public void init() {
//Call after the constructor
}
}
答案 6 :(得分:-1)
为什么不这样:
Class A {
public A() {
//... Do you thing
this.init();
}
public void init() {
//Call after the constructor
}
}