我最近在尝试简化具有大约50%相同代码的类构造函数时偶然发现了这一点。看起来我无法重新使用我以前的构造函数定义(它处理初始化)来自另一个重载它的构造函数。
为了清楚起见,这就是我一直想说的:
public MusicOrganizationHelper(Context context)
{
mContext = context;
// More object initializations using 'context'..
}
public MusicOrganizationHelper(Context context, ArrayList<String> fileUris)
{
MusicOrganizationHelper(context); // Why can't I do this?
for (String uri : fileUris) {
if (uri != null && !uri.equalsIgnoreCase("")) {
try {
AudioFile audioFile = read(uri);
mAudioFileMap.put(audioFile, audioFile.getTagOrCreateAndSetDefault());
} catch (CannotReadException e) {
e.printStackTrace();
}
}
}
}
我知道这可以通过制作某种private void init(context)
方法轻松生成,但我只是好奇:为什么我不能像其他任何方法一样调用构造函数甚至在其类定义中?它们看起来与我非常相似(它们是构造函数和“农民”方法)。
如果事实证明这是显而易见的事情,我很抱歉。我对Java
和OOP相对较新。
提前致谢!
答案 0 :(得分:2)
替换此
MusicOrganizationHelper(context); // Why can't I do this?
与
this(context);
这是从同一个类的另一个构造函数调用一个构造函数的方法。 请注意,这必须是构造函数的第一行。
构造函数体的第一个语句可能是对同一个类或直接超类(§8.8.7.1)的另一个构造函数的显式调用。
(JLS)