【发布时间】:2010-09-10 14:40:18
【问题描述】:
有谁知道为什么可以在构造函数的第一行使用this() 或super() 引用static 方法,而不是非静态方法?
考虑以下工作:
public class TestWorking{
private A a = null;
public TestWorking(A aParam){
this.a = aParam;
}
public TestWorking(B bParam)
{
this(TestWorking.getAFromB(bParam));
}
//It works because its marked static.
private static A getAFromB(B param){
A a = new A();
a.setName(param.getName());
return a;
}
}
还有以下非工作示例:
public class TestNotWorking{
private A a = null;
public TestNotWorking(A aParam){
this.a = aParam;
}
public TestNotWorking(B bParam)
{
this(this.getAFromB(bParam));
}
//This does not work. WHY???
private A getAFromB(B param){
A a = new A();
a.setName(param.getName());
return a;
}
}
【问题讨论】:
-
这可能只是示例代码,但我对这段代码的担忧是,您有从埋在第三类 @987654328 中的
B实例构造A实例的逻辑@. -
我同意你的担心。我这样做的原因如下:我在一个类中使用了一个能力有限的第三方 API,并且该类被标记为 final。唯一的方法是克隆原始对象并处理副本。我使用原始对象作为新对象的参数。出于示例的目的,我对其进行了一些修改。
-
@Koekiebox 为什么你想知道 TestNotWorking.getAFromB(bParam) 不起作用?它是实例方法。您应该创建对象或使用它。
标签: java constructor initialization