Java 正在消失的默认构造函数

Java 正在消失的默认构造函数,java,android,dalvik,default-constructor,Java,Android,Dalvik,Default Constructor,我收到了大量具有以下堆栈跟踪的崩溃报告(名称已更改): android.app.Application有一个明确的无参数构造函数: public Application() { super(null); } MyApplication继承自android.app.Application,完全没有显式构造函数。根据我对Java规范的理解,这意味着编译器应该隐式插入以下构造函数: public MyApplication() { super(); } 这一定发生过,否则我根本就无法编译这

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

android.app.Application
有一个明确的无参数构造函数:

public Application() {
  super(null);
}
MyApplication
继承自
android.app.Application
,完全没有显式构造函数。根据我对Java规范的理解,这意味着编译器应该隐式插入以下构造函数:

public MyApplication() {
  super();
}
这一定发生过,否则我根本就无法编译这个应用程序。那么是什么导致了这些事故呢


编辑:以下是使用
javap
反编译ProGuard
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
}

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

注意:在这种情况下,这不是问题所在,但是如果您阅读这个问题是因为您遇到了相同的症状,那么它可能是您的问题……

根据我对Java规范的理解,这意味着编译器应该隐式插入以下构造函数

public MyApplication() {
    super();
}
只有当它是一个公共类时才是这样。发件人:

默认构造函数与类具有相同的可访问性(§6.6)

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


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

您是否尝试过显式声明构造函数?这样做时,您是否仍有问题?我知道它不会解释为什么这目前不起作用,但我只是好奇一下。这似乎有点含糊不清的联系:如果你有权访问编译后的资源,请运行
javap
,检查这样的构造函数是否存在并且是公共的。@Joffrey,我自己从来没有见过这种崩溃,只有在崩溃报告中见过。我可以显式地声明构造函数,但我需要一段时间才能看到它是否修复了“在野外”的问题,我在问题中添加了来自
javap
的输出。
MyApplication
确实是
public
@kpozin:好的-将把这个答案留给处于类似位置的其他人检查,但将进行编辑以表明它不是问题。
public MyApplication() {
    super();
}