如果没有' new'我怎么能使用构造函数?在Java?

时间:2014-11-23 10:59:49

标签: java oop constructor

我最近在尝试简化具有大约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相对较新。

提前致谢!

1 个答案:

答案 0 :(得分:2)

替换此

MusicOrganizationHelper(context); // Why can't I do this?

this(context);

这是从同一个类的另一个构造函数调用一个构造函数的方法。 请注意,这必须是构造函数的第一行。

  

构造函数体的第一个语句可能是对同一个类或直接超类(§8.8.7.1)的另一个构造函数的显式调用。

JLS