【问题标题】:Incorrect variable names in overridden methods覆盖方法中的变量名不正确
【发布时间】:2018-06-09 00:55:33
【问题描述】:

当我让 Android Studio 生成覆盖方法时,它会生成带有奇怪参数名称的方法。

例如根据文档 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)

我在一个项目中设置了 Android SDK 并安装了适用于 Android 27 的 Sources。

有什么想法吗?

谢谢

【问题讨论】:

  • its variable Names , does its 重要吗?!
  • this的可能重复
  • @Elsunhoty 这真的很重要。如果您仔细查看示例 onDateSet,您会发现 3 个整数表示 nothing,而有意义的名称确实可以准确地告诉您每个参数代表什么。我很好奇找到解决方案,因为我已经困扰了我一段时间!我知道一些方法曾经有很好的参数名称,但它们往往会停止。
  • 是的,你是对的

标签: java android kotlin overriding


【解决方案1】:

它与您的build.gradle 文件中定义的compileSdkVersion 相关。您应该为您用作compileSdkVersion 的API 安装Sources for Android SDK。所以尝试在 SDK Manager 中安装等于compileSdkVersion 的源版本。

我在build.gradle 文件中设置了compileSdkVersion 28。这是安装源版本 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) {
    }
}

更新:2018 年 10 月 23 日

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);

    ...
}

所以似乎没有办法解决,直到它在下一个发行版中得到修复。

【讨论】:

  • 是的,上面的例子也适用于我的情况,但是当我尝试创建 RecyclerView's Adapter 并覆盖 onCreateViewHolder(p0: ViewGroup, p1: Int) 方法它仍然显示不正确的参数变量名。
  • 感谢更新 :) 希望 Android 开发团队会注意到并修复此问题
  • 这么好的答案!
  • 感谢您节省了我的时间。我试图理解为什么我的FirebaseMessagingService 在覆盖方法上有这么奇怪的名字。
【解决方案2】:

正如氨基酸学所说,这是因为您尚未安装您正在使用的compileSdk 的源代码。 要安装源,请按照以下步骤操作:

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

2。 转到 sdk 管理器并在 SDK 平台选项卡中检查 show package details 选项(如果未选中)。然后为您的 compileSdk 版本安装源代码(在我的情况下是 26)。而已。现在,您将获得适当的参数名称。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多