22

请解释一下,为什么 IntelliJ IDEA 显示参数从未使用过?

在此处输入图像描述

 public void onClick(View view) { // Parameter 'view' never used
    Toast.makeText(this, "Hello", Toast.LENGTH_LONG).show();
}

<ToggleButton
    ...
    android:onClick="onClick"/>

但我知道,如果我删除这个从未使用过的参数(视图),Android 会抛出运行时异常。

为什么 IntelliJ IDEA v12.1 显示此类警告但 Eclipse 不显示。如何配置 IntelliJ IDEA 以隐藏所有 Android 项目的此类警告?

4

5 回答 5

46

对于 Kotlin,使用这句话来抑制这个警告:

fun onClick(@Suppress("UNUSED_PARAMETER")view: View) {

}
于 2018-04-17T07:43:08.283 回答
12

我不认为更改警告设置是最好的解决方案。

相反,您可以尝试以下代码:

public void onClick(@SuppressWarnings("UnusedParameters")View ignored) { // Parameter 'ignored' never used
    Toast.makeText(this, "Hello", Toast.LENGTH_LONG).show();
}
于 2013-06-10T06:58:12.457 回答
7

您会看到此警告,因为默认情况下启用了未使用符号检查,并且配置为也显示任何未使用的参数。虽然在这种特定情况下这不是问题,但它可以帮助您在其他情况下跟踪错误(例如,当您使用具有相似名称的局部变量时,因为拼写错误而不是实际的方法参数)。

此检查提供了许多选项,您可以根据需要对其进行调整,例如通过禁用检查参数选项。或者您可以定义注释,@Unused这样 IDE 将忽略带有这些注释的任何参数,或者您可以从Alt+Enter菜单、右箭头子菜单中禁止此检查(禁止类/方法/语句,编辑检查设置或完全禁用它) .

未使用的符号

压制

于 2013-04-10T13:49:11.033 回答
6

因为您从不view在方法中使用参数onClick。但是这个方法的默认签名。

例如,如果您将在方法中使用参数,IntelliJ IDEA 不会显示“从未使用过的参数”

public void onClick(View view) { // Parameter 'view' used
if(view.getId() == R.id.myId)  //example start
{
    Toast.makeText(this, "CorrectId", Toast.LENGTH_LONG).show();
}                             //example finish
Toast.makeText(this, "Hello", Toast.LENGTH_LONG).show();
}

更新:

例如,您在主布局中有 3 个按钮:

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/my_switcher"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical">

<Button
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:id="@+id/btn1"
        android:onClick="onClick"
        />
<Button
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:id="@+id/btn2"
        android:onClick="onClick"
        />
<Button
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:id="@+id/btn3"
        android:onClick="onClick"
        />

</LinearLayout>

我您的活动方法是 onClick 处理来自三个按钮的事件。我们需要识别按钮已被按下。

 public void onClick(View view) { // Parameter 'view' used
    switch (view.getId())
    {
        case (R.id.btn1):
        {
            Toast.makeText(this, "Hello Button_1 pressed", Toast.LENGTH_LONG).show();
            break;
        }
        case (R.id.btn2):
        {
            Toast.makeText(this, "Hello Button_2 pressed", Toast.LENGTH_LONG).show();
            break;
        }
        case (R.id.btn3):
        {
            Toast.makeText(this, "Hello Button_2 pressed", Toast.LENGTH_LONG).show();
            break;
        }
    }

这是如何使用“视图”的一个示例

于 2013-04-10T13:15:38.070 回答
4

上面所说的一切都是伟大而真实的。这是另一种查看方式:

起初我没有看到需要使用这个参数。这是因为在我正在处理的应用程序中,只有一个视图(可能是按钮)调用此 OnClick 回调。

也就是说,无需检查参数。只有一个按钮,它必须是它。

所以我感到困惑、愤怒或悲伤:

  • API 需要参数,
  • IDE 抱怨未使用该参数。

...

但我们可以用另一种方式看待它:

无需检查参数。只有一个按钮,一定是它

我的项目中没有任何东西可以确保前面的陈述。今天可能是正确的,但在项目后期可能会变得不正确。它也可能因错误或意外而不真实。一个简单的错误。

当开发人员希望应用程序易于维护时,他会怎么做?他检查或确保他想要真实的事实。

所以我选择让这个警告消失的方式是:

fun start_sync(button : View){
    assert(button.id == R.id.my_only_button)
    //...
}

最后,IDE和API都是对的,错误是假设我不需要这个参数。

于 2020-05-02T15:55:01.170 回答