我最近在尝试简化具有大约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还是比较陌生。

提前致谢!

最佳答案

取代这个

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




this(context);


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


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


JLS

关于java - 如何在Java中使用没有“new”的构造函数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27088194/

10-12 14:37
查看更多