gpt4 book ai didi

android - 子类化应用程序是在 Android 中实现静态辅助方法的唯一方法吗?

转载 作者:行者123 更新时间:2023-11-29 15:27:45 25 4
gpt4 key购买 nike

我想在我的 Android 应用程序中有一个辅助类,例如 Convert 或 Utils。我遇到的典型问题是:

public class Convert {

private Convert() {
// I can't be instantiated
}

public static int pxToDp(float pixels) {
DisplayMetrics displayMetrics = getResources().getDisplayMetrics();
return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, pixels, displayMetrics);
}
}

当然上面的失败是因为 Convert 不知道 getResources() 是什么。所以我有两个选择:

  1. 每次我想使用辅助方法时都传递一个上下文,这是垃圾
  2. 子类应用程序,修改我的 list ,然后创建一个引用,如下所示:

    public class App extends Application {

    private static Context mContext;

    @Override
    public void onCreate() {
    super.onCreate();
    mContext = this;
    }

    public static Context getContext() {
    return mContext;
    }
    }

然后在我需要的地方执行 App.getContext()

问题:这不对,优雅的处理方式是什么?

最佳答案

如果您子类应用程序显然可以工作,但您最终可能会得到一个巨大的、可怕的类,它做了一大堆不相关的事情——践踏单一职责原则。

是的,将 Context 传递给实用程序类有点困惑和烦人,但这意味着您可以为每种类型的实用程序(例如 StringUtils 或其他)创建类,并且至少保持责任分离。

我建议不要在任何地方都使用 App.getContext,因为这意味着您所有的实用程序类都将依赖于 App,这使得它们很难重用。如果传入上下文,则可以更轻松地在其他应用中重用一些实用程序类。

所以我会说使用单独的类,并将该 Context 传递给方法。它有点难看,但在我看来比其他选择要好得多。

关于android - 子类化应用程序是在 Android 中实现静态辅助方法的唯一方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10143508/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com