【问题标题】:Can Application class be package-private?应用程序类可以是包私有的吗?
【发布时间】:2018-01-06 19:10:46
【问题描述】:

我的应用程序类代码:

import android.app.Application;
import android.os.Process;

import com.squareup.leakcanary.LeakCanary;

public class SampleApplication extends Application {

    public SampleApplication() {
        super();
    }

    @Override
    public void onCreate() {
        super.onCreate();
        //noinspection ConstantConditions
        if (LeakCanary.isInAnalyzerProcess(this)) {
            // This process is dedicated to LeakCanary for heap analysis.
            // You should not init your app in this process.
            return;
        }
        LeakCanary.install(this);
        // Normal app init code...
    }

    @Override
    public void onTerminate() {
        System.exit(0);
        Process.killProcess(Process.myPid());

        super.onTerminate();
    }
}

Android Studio 3.1 Canary 7 --> 分析 --> 检查代码 --> 确定:

声明访问可以是较弱的检查

1 警告:SampleApplication 可以是包私有的

Application 类可以是包私有还是 lint 错误?

【问题讨论】:

  • 是的,可以包私有
  • @UdeshUK, Application:“当您的应用程序/包的进程为创建”。这是否意味着Application类必须是公共的?
  • 正如 Alex 引用的,来自 Java 文档 - “可以使用修饰符 public 声明一个类,在这种情况下,该类对所有类都可见。如果一个类没有修饰符(默认值,也称为包私有),它只在自己的包中可见”

标签: java android android-studio android-studio-3.1


【解决方案1】:

是的,它可以是包私有的。查看堆栈溢出中的this 问题,并阅读this 以了解如何控制对类成员的访问。

进一步解释:从 Application 继承允许您在没有 main 方法的情况下启动应用程序(继承的类充当主类)。如果您使用它访问其他包,它需要公开。如果没有,您可以将其设置为包私有。

【讨论】:

  • Application: "Application 类或 Application 类的子类在创建应用程序/包的进程时在任何其他类之前被实例化"。这是否意味着Application类必须是公共的?
  • @AlexanderSavin Inhering from Application 允许您在没有主方法的情况下启动应用程序(继承的类充当主类)。如果您使用它访问其他包,它需要公开。如果没有,您可以将其设置为包私有。
  • Alex Cuadrón 谢谢,我接受了您的回答,请将您的评论添加到您的回答中
  • @AlexanderSavin 完成,感谢您选择答案:D
猜你喜欢
  • 2011-08-24
  • 1970-01-01
  • 2016-01-23
  • 2011-06-13
  • 1970-01-01
  • 2012-01-06
  • 2013-01-09
  • 2019-11-28
相关资源
最近更新 更多