哪种写法更好?

今天和同时讨论问题,他说他的写法比我好,但从逻辑的角度来讲,我觉得我写的逻辑没有问题,而且更简洁,大家来帮忙看一下到底有什么区别?
这是我写的:

private static int statusBarHeight = DeviceUtils.fromDipToPx(ApplicationContext, 20);
    public static int getStatusBarHeight(Activity activity) {
        if (activity == null||activity.isFinishing) {
            return statusBarHeight;
        } else {
            Rect rectgle = new Rect();
            Window window = activity.getWindow();
            window.getDecorView().getWindowVisibleDisplayFrame(rectgle);
            statusBarHeight = rectgle.top;
            return rectgle.top;
        }
    }

这是我同事写的:

private static boolean USE_CUSTOM_STATUS_BAR_HEIGHT = true;
    private static int statusBarHeight = -1;
    public static int getStatusBarHeight(Activity activity) {
        if (statusBarHeight != -1 && !USE_CUSTOM_STATUS_BAR_HEIGHT){
            return statusBarHeight;
        }
        try {
            if (activity != null && !activity.isFinishing()){
                Rect rect = new Rect();
                Window window = activity.getWindow();
                window.getDecorView().getWindowVisibleDisplayFrame(rect);
                statusBarHeight = rect.top;
                USE_CUSTOM_STATUS_BAR_HEIGHT = false;
            }
        } catch (Exception e){
            LOGGER.d(TAG,"getStatusBarHeight Exception",e);
        }
        if (USE_CUSTOM_STATUS_BAR_HEIGHT){
            statusBarHeight = DeviceUtils.fromDipToPx(ApplicationContext, 20);
        }
        return statusBarHeight;
    }
阅读 2.8k
5 个回答

同事对异常的处理还是有必要的。不过乍一看的确有点乱,除去这点,你的代码更容易懂。
不过既然有两个类变量出现在方法的判断语句里,可能是为了之后业务扩展的时候能够用上。

他的思路更清晰,但不知道你们异常是如何处理的,此处是否需要捕获异常

异常处理的必要性不好判断。去掉异常处理的话你的比较好,简单直接。
他的逻辑比较混乱,且多了一个不必要的变量,容易出错。

为什么一定要较个高下?不能互相学习?

这两份代码都有一个不好的习惯:定义了一个全局静态ApplicationContextContext类型的变量最好还是在各个组件各自的生命周期里调用吧

getStatusBarHeight 调用系统API获取状态栏高度,本质上仅需要在进程启动后只调用一次, 后续全部使用缓存值。

因此,你同事写的稍好一些。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题