我在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;
}
修改参数而不是返回新值
的优点是什么答案 0 :(得分:2)
修改参数而不是返回新实例的好处是,您可以将实例化控制权交给调用代码 - 即允许它重用现有实例。
“修改参数”方法允许您使用几种此类方法初始化对象。 e.g。
LocaleConfiguration localeConfiguration = new LocaleConfiguration();
readConfiguration(Launcher.this, localeConfiguration);
readSomeOtherConfiguration(Launcher.this, localeConfiguration);
return localeConfiguration;
可以说你可以通过返回作为参数传入的相同实例来做同样的事情,但我个人认为这是在寻找麻烦。
另一个可能的原因可能是如果实例化的成本很高,您可能想要回收旧对象。这似乎不是您提供的代码的情况,而且这是一个优化,所以只有在绝对必要时才考虑这样做!
我个人倾向于采取'返回新实例'的方法,除非有特殊原因不这样做。我认为它更简单,并减少了调用代码中细微错误的可能性。