,我發現了一些Android的代碼(link):空吸來修改參數
public void getSize(Point outSize) {
synchronized (this) {
updateDisplayInfoLocked();
mDisplayInfo.getAppMetrics(mTempMetrics, mCompatibilityInfo);
outSize.x = mTempMetrics.widthPixels;
outSize.y = mTempMetrics.heightPixels;
}
}
而只是想知道 - 是什麼讓這片筆者來實現它在一個這樣的方式? (爲什麼它會修改參數而不是返回新對象?Get-methods通常是啞巴,有返回值,並且不會修改參數。我錯了嗎?)
我可以從我的頂部獲得的唯一原因頭是 - 效率。此方法的用戶可以控制創建的Point對象的數量。但是設計這樣的API是否是一個好習慣?
UPD:
我會實現它是這樣的(或類似的水木清華):
public Point getSize() {
Point outSize = new Point();
synchronized (this) {
updateDisplayInfoLocked();
mDisplayInfo.getAppMetrics(mTempMetrics, mCompatibilityInfo);
outSize.x = mTempMetrics.widthPixels;
outSize.y = mTempMetrics.heightPixels;
}
return outSize;
}
查看代碼;如果他們不使用這種方法,則會創建3個新對象。兩個用於''getAppMetrics''(嗯,這是使用單個get返回兩個參數的唯一方法)。和一個Point對象。我個人認爲他們做了正確的設計選擇。 – harism
@harism,我添加了另一段代碼 - 只是一個對象,但現在看起來更加正常。不是嗎? –
''mDisplayInfo.getAppMetrics''也是一個無效的getter。一旦你用一個返回新對象的getter替換它,你會發現回收在某些情況下是一個好習慣。 – harism