android – 修改参数的void getter

我发现了一些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:

我会像这样实现它(或类似的smth):

   public Point getSize() {
      Point outSize = new Point();
      synchronized (this) {
          updatedisplayInfoLocked();
          mdisplayInfo.getAppMetrics(mTempMetrics, mCompatibilityInfo);
          outSize.x = mTempMetrics.widthPixels;
          outSize.y = mTempMetrics.heightPixels;
      }
      return outSize;
   }

解决方法:

如果批量调用方法,则删除不必要的对象创建可以显着提高性能.当您开始查看被调用的低级代码方法时,您就开始进行这些优化.

像getSize()这样的方法的问题是你真的想要返回一个原语.如果getSize()返回一个int,这将不是问题.在这种情况下,将参数传递给方法以用作“输出参数”是很常见的.

在J2ME中我们一直都是这样做的.特别是对于返回x / y坐标.在这种情况下,您有2个不会导致对象创建的选项:

>创建2个方法:int getX()和int getY()OR
>创建一个将X和Y坐标写入传递参数的方法,如下所示:void getXY(int [] coords)

在第二种方法中,调用者分配一次int [2]数组(可能是静态的),然后可以使用相同的数组再次调用getXY()方法来传递坐标.

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...