修改方法参数或在java中返回

时间:2013-02-06 09:01:38

标签: java

我在android源代码中看到了这个方法。

 protected LocaleConfiguration doInBackground(Void... unused) {
                    LocaleConfiguration localeConfiguration = new LocaleConfiguration();
                    readConfiguration(Launcher.this, localeConfiguration);
                    return localeConfiguration;
                }
 private static void readConfiguration(Context context, LocaleConfiguration configuration) {
        DataInputStream in = null;
        try {
            in = new DataInputStream(context.openFileInput(PREFERENCES));
            configuration.locale = in.readUTF();
            configuration.mcc = in.readInt();
            configuration.mnc = in.readInt();
        } catch (FileNotFoundException e) {
            // Ignore
        } catch (IOException e) {
            // Ignore
        } finally {
            if (in != null) {
                try {
                    in.close();
                } catch (IOException e) {
                    // Ignore
                }
            }
        }
    }

为什么不这样呢

 private static LocaleConfiguration readConfiguration(Context context) {
        LocaleConfiguration configuration = new LocaleConfiguration();
        DataInputStream in = null;
        try {
            in = new DataInputStream(context.openFileInput(PREFERENCES));
            configuration.locale = in.readUTF();
            configuration.mcc = in.readInt();
            configuration.mnc = in.readInt();
        } catch (FileNotFoundException e) {
            // Ignore
        } catch (IOException e) {
            // Ignore
        } finally {
            if (in != null) {
                try {
                    in.close();
                } catch (IOException e) {
                    // Ignore
                }
            }
        }
        return configuration;
    }

修改参数而不是返回新值

的优点是什么

1 个答案:

答案 0 :(得分:2)

修改参数而不是返回新实例的好处是,您可以将实例化控制权交给调用代码 - 即允许它重用现有实例。

“修改参数”方法允许您使用几种此类方法初始化对象。 e.g。

LocaleConfiguration localeConfiguration = new LocaleConfiguration();
readConfiguration(Launcher.this, localeConfiguration);
readSomeOtherConfiguration(Launcher.this, localeConfiguration);
return localeConfiguration;

可以说你可以通过返回作为参数传入的相同实例来做同样的事情,但我个人认为这是在寻找麻烦。

另一个可能的原因可能是如果实例化的成本很高,您可能想要回收旧对象。这似乎不是您提供的代码的情况,而且这是一个优化,所以只有在绝对必要时才考虑这样做!

我个人倾向于采取'返回新实例'的方法,除非有特殊原因不这样做。我认为它更简单,并减少了调用代码中细微错误的可能性。