gpt4 book ai didi

java - 消失的默认构造函数

转载 作者:太空宇宙 更新时间:2023-11-03 10:46:08 25 4
gpt4 key购买 nike

我收到了一些具有以下堆栈跟踪(名称已更改)的崩溃报告:

Caused by: java.lang.InstantiationException: can't instantiate class com.example.MyApplication; no empty constructor
at java.lang.Class.newInstanceImpl(Native Method)
at java.lang.Class.newInstance(Class.java:1319)
at android.app.Instrumentation.newApplication(Instrumentation.java:997)
at android.app.Instrumentation.newApplication(Instrumentation.java:982)
at android.app.LoadedApk.makeApplication(LoadedApk.java:496)
... 11 more

java.lang.RuntimeException: Unable to instantiate application com.example.MyApplication: java.lang.InstantiationException: can't instantiate class com.example.MyApplication; no empty constructor
at android.app.LoadedApk.makeApplication(LoadedApk.java:501)

android.app.Application 有一个显式的无参数构造函数:

public Application() {
super(null);
}

MyApplication 继承自 android.app.Application 并且根本没有没有明确的构造函数。根据我对 Java 规范的理解,这意味着编译器应该隐式插入以下构造函数:

public MyApplication() {
super();
}

这一定是发生了,否则我一开始就无法编译该应用程序。那么,是什么导致了这些崩溃?


编辑:这是使用 javap 反编译 ProGuard-ed MyApplication.class 的部分输出:

Compiled from "MyApplication.java"
public class com.example.MyApplication extends android.app.Application {

public com.example.MyApplication();
Signature: ()V

public void onCreate();
Signature: ()V

public void onLowMemory();
Signature: ()V

public void onTrimMemory(int);
Signature: (I)V

// ... some other methods ...

static {};
Signature: ()V
}

默认构造函数肯定在那里,而且是公开的。

最佳答案

注意:事实证明这不是本例中的问题,但如果您正在阅读此问题是因为您遇到过相同的症状,那么它可能是你……

According to my understanding of the Java spec, this means that the following constructor should be implicitly inserted by the compiler

public MyApplication() {
super();
}

只有当它是一个公共(public) 类时才会出现这种情况。来自 section 8.8.9 of the JLS :

The default constructor has the same accessibility as the class (§6.6).

因此,如果您的类被声明为具有除 public 之外的任何访问权限,则构造函数也不会是 public。

您还没有显示您的类声明,但您应该首先检查它是否是公开的。

关于java - 消失的默认构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23345776/

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