Java 如何添加默认构造函数

Java 如何添加默认构造函数,java,android,constructor,default-constructor,android-lint,Java,Android,Constructor,Default Constructor,Android Lint,希望我没有在这里重复一个问题,但我在stack exchange上找到的所有问题似乎都不符合我的需要 以下是我的代码片段: public class custom_row_adapter extends ArrayAdapter<Integer> { custom_row_adapter(Context context, ArrayList<Integer> picId, String url, String fullUrl) { super(

希望我没有在这里重复一个问题,但我在stack exchange上找到的所有问题似乎都不符合我的需要

以下是我的代码片段:

public class custom_row_adapter extends ArrayAdapter<Integer> {
     custom_row_adapter(Context context, ArrayList<Integer> picId, String url, String fullUrl) {
         super(context, R.layout.activity_custom_row_adapter, picId);
}
     //Do stuff
公共类自定义行适配器扩展ArrayAdapter{
自定义行适配器(上下文上下文、ArrayList picId、字符串url、字符串fullUrl){
super(上下文,R.layout.activity\自定义\行\适配器,picId);
}
//做事
在应用程序中一切正常,现在我尝试生成一个签名的apk,我得到一个很好的小错误,我需要一个默认构造函数。因此我决定添加一个,现在我的代码如下所示:

public class custom_row_adapter extends ArrayAdapter<Integer> {
    public custom_row_adapter() {
        super();
}
     custom_row_adapter(Context context, ArrayList<Integer> picId, String url, String fullUrl) {
         super(context, R.layout.activity_custom_row_adapter, picId);
}
//Do Stuff
公共类自定义行适配器扩展ArrayAdapter{
公共自定义_行_适配器(){
超级();
}
自定义行适配器(上下文上下文、ArrayList picId、字符串url、字符串fullUrl){
super(上下文,R.layout.activity\自定义\行\适配器,picId);
}
//做事
现在我遇到一个新错误,它无法为
ArrayAdapter()找到合适的构造函数

所以我在谷歌上找到了几篇帖子,其中一篇告诉我,我可以通过在“检查”选项卡中搜索Instantiable并将其转换为“警告”来绕过这个错误,但它不会解决问题

那么我该如何解决这个问题呢?提前谢谢

编辑:对于那些说我可以添加
public custom\u row\u adpater(){}

编辑2:这里还有一些图片,请注意左下角的错误:

什么在调试中起作用:

Paul G的回答是:

解除构装师:

无构造函数:

这是因为它没有定义无参数构造函数。这是编译器在无参数调用super()时所寻找的。它至少需要一个上下文和一个资源(int)初始化自身。

这是因为它没有定义无参数构造函数。这是编译器在无参数调用super()时所寻找的。它至少需要一个上下文和一个资源(int)初始化自身。

没有默认的零参数构造函数,因此您必须重写其中一个构造函数。您可以在此处找到更多信息

公共类自定义_行_适配器扩展ArrayAdapter{
公共自定义行适配器(上下文上下文,int资源){
超级(上下文、资源);
}
没有默认的零参数构造函数,因此您必须重写其中一个构造函数。您可以在此处找到更多信息

公共类自定义_行_适配器扩展ArrayAdapter{
公共自定义行适配器(上下文上下文,int资源){
超级(上下文、资源);
}

既然您正在扩展一个数组适配器,您可以从这里实例化您的对象:

Custom_row_adapter customAdapter = new Custom_row_adapter(this, android.R.layout.simple_spinner_item, insertIntegerArray);
如果您想在类中添加一些额外的参数,请创建一个自定义的构造函数

 public Custom_row_adapter(Context context, int resource, Integer[] array, arg extraArg) {
    super(context, resource, array);
    this.extraArg = extraArg;
 }

我的建议是将您的重命名为
自定义行适配器
。最好以大写字符开始类名。

因为您正在扩展数组适配器,您可以从这里实例化您的对象:

Custom_row_adapter customAdapter = new Custom_row_adapter(this, android.R.layout.simple_spinner_item, insertIntegerArray);
如果您想在类中添加一些额外的参数,请创建一个自定义的构造函数

 public Custom_row_adapter(Context context, int resource, Integer[] array, arg extraArg) {
    super(context, resource, array);
    this.extraArg = extraArg;
 }
我的建议是将您的重命名为
自定义行适配器
。使用大写字符开始类名是一个很好的做法。

来自JavaSE文档:

如果构造函数体不是以显式构造函数调用开始,并且所声明的构造函数不是原始类对象的一部分,则构造函数体隐式地以超类构造函数调用“super();”开始,这是对其直接超类的构造函数的调用,不带任何参数

为默认构造函数提供一个空构造函数体与放置一个超级调用相同,即

public custom_row_adapter() {
    super();
}

public custom_row_adapter() {}
因此它会导致一个错误,因为超类中没有默认构造函数,需要显式构造函数调用。在这种情况下,您可以重载构造函数并使用this(args)调用该构造函数,或者使用super(args)调用某个超类构造函数

参考:

来自JavaSE文档:

如果构造函数体不是以显式构造函数调用开始,并且所声明的构造函数不是原始类对象的一部分,则构造函数体隐式地以超类构造函数调用“super();”开始,这是对其直接超类的构造函数的调用,不带任何参数

为默认构造函数提供一个空构造函数体与放置一个超级调用相同,即

public custom_row_adapter() {
    super();
}

public custom_row_adapter() {}
因此它会导致一个错误,因为超类中没有默认构造函数,需要显式构造函数调用。在这种情况下,您可以重载构造函数并使用this(args)调用该构造函数,或者使用super(args)调用某个超类构造函数

参考:

此错误意味着由于某种原因,皮棉(错误地)认为您的适配器应该是可实例化的。这适用于可能由系统(如活动、广播接收器)实例化的对象,但不适用于适配器,因为它们总是在应用程序的代码中实例化。例如,
ArrayAdapter
SimpleCursorAdapter
等常用适配器没有默认构造函数

您可以尝试让Android Studio发挥作用,例如更新构建工具、清理工作区、删除
build
目录……如果它不起作用,您可以添加请求的(且无用的)默认构造函数:

public custom_row_adapter() {
    super(null , 0);
    throw new RuntimeException("This is a workaround and should not be used");
}

此错误意味着出于某种原因,lint(错误地)认为您的适配器应该是可实例化的。这适用于可能由系统实例化的对象,如