Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 重写方法中的变量名不正确_Java_Android_Kotlin_Overriding - Fatal编程技术网

Java 重写方法中的变量名不正确

Java 重写方法中的变量名不正确,java,android,kotlin,overriding,Java,Android,Kotlin,Overriding,当我让androidstudio生成override方法时,它将生成具有奇怪参数名的方法 例如,根据文档,onCheckedChanged应该如下所示: public void onCheckedChanged(CompoundButton buttonView, boolean isChecked){} 但是我有 public void onCheckedChanged(CompoundButton compoundButton, boolean b){} 或者我得到的DatePicker

当我让androidstudio生成override方法时,它将生成具有奇怪参数名的方法

例如,根据文档,onCheckedChanged应该如下所示:

public void onCheckedChanged(CompoundButton buttonView, boolean isChecked){}
但是我有

public void onCheckedChanged(CompoundButton compoundButton, boolean b){}
或者我得到的DatePickerDialog中的onDateSet:

onDateSet(DatePicker datePicker, int i, int i1, int i2)
而不是

onDateSet(DatePicker view, int year, int month, int dayOfMonth)
我在一个项目中安装了安卓SDK,并安装了安卓27的源代码

有什么想法吗


谢谢

它与您的
build.gradle
文件中定义的
compileSdkVersion
相关。您应该为用作编译SDK版本的API安装Android SDK源代码。因此,请尝试在SDK管理器中安装等于
compileSdkVersion
的源代码版本

我已经在
build.gradle
文件中设置了
compileSdkVersion 28
。以下是安装sources版本28之前和之后的结果(注意:在此之后应重新启动AndroidStudio):

之前:

val textWatcher = object: TextWatcher {

    override fun afterTextChanged(p0: Editable?) {
    }

    override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
    }

    override fun onTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
    }
}
val textWatcher = object: TextWatcher {

    override fun afterTextChanged(s: Editable?) {
    }

    override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
    }

    override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
    }
}
之后:

val textWatcher = object: TextWatcher {

    override fun afterTextChanged(p0: Editable?) {
    }

    override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
    }

    override fun onTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
    }
}
val textWatcher = object: TextWatcher {

    override fun afterTextChanged(s: Editable?) {
    }

    override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
    }

    override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
    }
}

更新:10/23/2018 AppCompat-v28库(如
RecyclerView
类)的问题来自它们的
aar
工件。如果使用版本27.1.1库,则问题将消失。无论您使用的是版本28的哪个发行版(例如28.0.0、28.0.0-alpha1、28.0.0-alpha3、28.0.0-rc1、28.0.0-rc2等),在所有版本28发行版中,抽象方法的参数名称都是模糊的

public abstract static class Adapter<VH extends RecyclerView.ViewHolder> {

    public Adapter() {
    }

    @NonNull
    public abstract VH onCreateViewHolder(@NonNull ViewGroup var1, int var2);

    public abstract void onBindViewHolder(@NonNull VH var1, int var2);

    ...
}
公共抽象静态类适配器{
公共适配器(){
}
@非空
公共抽象VH onCreateViewHolder(@NonNull ViewGroup var1,int var2);
BindViewHolder上的公共摘要无效(@NonNull VH var1,int var2);
...
}

因此,在下一个发行版中修复之前,似乎没有办法解决这个问题。

它与
compileSdkVersion
相关,后者在
build.gradle
文件中定义。您应该为用作编译SDK版本的API安装Android SDK源代码。因此,请尝试在SDK管理器中安装等于
compileSdkVersion
的源代码版本

我已经在
build.gradle
文件中设置了
compileSdkVersion 28
。以下是安装sources版本28之前和之后的结果(注意:在此之后应重新启动AndroidStudio):

之前:

val textWatcher = object: TextWatcher {

    override fun afterTextChanged(p0: Editable?) {
    }

    override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
    }

    override fun onTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
    }
}
val textWatcher = object: TextWatcher {

    override fun afterTextChanged(s: Editable?) {
    }

    override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
    }

    override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
    }
}
之后:

val textWatcher = object: TextWatcher {

    override fun afterTextChanged(p0: Editable?) {
    }

    override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
    }

    override fun onTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
    }
}
val textWatcher = object: TextWatcher {

    override fun afterTextChanged(s: Editable?) {
    }

    override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
    }

    override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
    }
}

更新:10/23/2018 AppCompat-v28库(如
RecyclerView
类)的问题来自它们的
aar
工件。如果使用版本27.1.1库,则问题将消失。无论您使用的是版本28的哪个发行版(例如28.0.0、28.0.0-alpha1、28.0.0-alpha3、28.0.0-rc1、28.0.0-rc2等),在所有版本28发行版中,抽象方法的参数名称都是模糊的

public abstract static class Adapter<VH extends RecyclerView.ViewHolder> {

    public Adapter() {
    }

    @NonNull
    public abstract VH onCreateViewHolder(@NonNull ViewGroup var1, int var2);

    public abstract void onBindViewHolder(@NonNull VH var1, int var2);

    ...
}
公共抽象静态类适配器{
公共适配器(){
}
@非空
公共抽象VH onCreateViewHolder(@NonNull ViewGroup var1,int var2);
BindViewHolder上的公共摘要无效(@NonNull VH var1,int var2);
...
}

因此,在下一个发行版中确定之前,似乎没有办法解决这个问题。

正如氨基造影术所说,这是因为您尚未安装您正在使用的
编译器DK的源代码。
要安装源,请执行以下步骤:

  • 检查项目的compileSdk版本。(从应用程序级别
    build.gradle
    file)。如下图所示,我的compileSdk版本是26。所以,我必须为平台26安装源代码

  • 二,。 转到sdk管理器,在sdk平台选项卡中检查
    显示软件包详细信息
    选项(如果未选中)。然后安装compileSdk版本的源代码(在我的例子中是26)。就这样。现在,您将获得适当的参数名称


    正如氨基造影术所说,这是因为您尚未安装正在使用的
    compileSdk
    的源代码。 要安装源,请执行以下步骤:

  • 检查项目的compileSdk版本。(从应用程序级别
    build.gradle
    file)。如下图所示,我的compileSdk版本是26。所以,我必须为平台26安装源代码

  • 二,。 转到sdk管理器,在sdk平台选项卡中检查
    显示软件包详细信息
    选项(如果未选中)。然后安装compileSdk版本的源代码(在我的例子中是26)。就这样。现在,您将获得适当的参数名称


    it
    s变量名,这有关系吗?!@Elsunhoty的可能复制品确实很重要。如果仔细看一下示例
    onDateSet
    ,您会发现3个整数没有任何意义,而有意义的名称会准确地告诉您每个参数代表什么。我很好奇能找到解决这个问题的办法,因为我已经有一段时间被它困扰了!我知道有些方法过去有很好的参数名,但它们往往会停止。是的,你说得对。它是
    s变量名,这有关系吗?!@Elsunhoty的可能复制品确实很重要。如果仔细看一下示例
    onDateSet
    ,您会发现3个整数没有任何意义,而有意义的名称会准确地告诉您每个参数代表什么。我很好奇能找到解决这个问题的办法,因为我已经有一段时间被它困扰了!我知道有些方法有很好的参数名,它们只是倾向于停止。是的,你是对的是的,上面的例子在我的例子中也适用,但是当我尝试创建RecyclerView的适配器并覆盖onCreateViewHolder时(p0:ViewGroup,p1:Int)方法仍然显示不正确的参数变量名。感谢更新:)希望Android开发团队注意到并修复这个问题,这是一个非常好的答案!谢谢你节省了我的时间。我试图理解为什么我的
    FirebaseMessagingService
    在重写方法上有这么奇怪的名字