【问题标题】:Variables with underline带下划线的变量
【发布时间】:2023-12-27 16:23:01
【问题描述】:

我在 Android Studio 上的某些变量中出现了下划线(在本例中为“位置”变量)。我认为这不是错误,因为应用程序运行完美,编译器一切正常。 我想知道这是什么意思?

【问题讨论】:

  • 您使用的是什么 IDE?你能发布更多与职位相关的代码吗?
  • @Theyna Android Studio 基于 IDEA。我使用 Android Studio 多年,我不记得在我不按 ctrl 键时曾看到过带下划线的文本。
  • 你检查过警告列表吗?
  • @rekire 我同意你的看法,我只是想确认他使用的是 Android Studio,并且编辑是这样做的。

标签: android android-studio


【解决方案1】:

这意味着变量是在当前方法之外声明的。例如,在这种情况下,position 可能被声明为 new DialogInterface.OnClickListener() 之外的类成员,在您实现 onItemLongClick() 方法的类中。

它们是这样声明的:

public class MyClass{
    private int position;

    // Other code...

}

【讨论】:

  • 这解释了颜色,但不解释为什么加下划线。
  • 对,我错了,因为它被声明为final。请为@ChrisGilardi 的答案投票
  • 为了它的价值(问题已经很老了),但我的课程没有被宣布为最终课程,我仍然看到这种行为。
  • 在这种情况下,这意味着它实际上是最终的,因此对 onClick 方法之外的变量的更改将不会反映在方法内部。
【解决方案2】:

我相信带下划线的变量代表常量(final 或 effectively final),因为根据我的经验,我只有在声明 final 对象以在匿名类中使用时才会看到这种装饰。不过,我似乎无法在文档中找到它。

【讨论】:

  • 我猜你是对的,在查看了一些代码文件后我看到了相同的模式。
  • 是的,这就是原因。声明为 final 的变量带有下划线。不是每个人都...
  • 对我来说,它甚至显示在非最终变量上。 @sarigalin 下面的回答是正确的,它与重新分配的变量有关。
【解决方案3】:

我已经找到了这个问题的答案here

装饰是语法高亮首选项。看看File > Settings > Editor > Color Scheme > Java/Kotlin

对于 Java,您可以在例如 Parameters > Implicit anonymous class parameter 找到此效果。这是复选框Effects

Properties and Variables > Var (mutable variable, parameter or property) 上的 Kotlin 也是如此。

【讨论】:

    【解决方案4】:

    这可能是“重新分配参数”的标志

    【讨论】:

    • 在 IntelliJ 2018.2.1 中我就是这种情况。
    • 主要设置在Editor -> Language Defaults -> Identifiers -> Reassigned parameters
    • 语言默认值中重新分配的标记“下划线”现在也用于重新分配的变量,而不仅仅是参数。我现在将参数设置为“粗体下划线”以进一步区分它。
    • 对于重新分配的局部变量也会出现。如果它打扰您,只需将其关闭(它打扰我 - 我喜欢逐步构建变量,它总是标记这个伪警告)。
    【解决方案5】:

    这可能是因为一个不可变的变量被修改了。就像重新分配字符串或尝试修改最终声明的变量一样。

    String buffer = "";
    buffer = buffer + "new string";
    

    将在缓冲区下划线,因为字符串是不可变对象。

    【讨论】:

      【解决方案6】:

      如果您知道side effect in programming 是什么,那么这对您来说很容易。为了保护您的变量免受副作用的影响,IDE 会显示下划线作为警告。这有时对减少代码中的逻辑错误很有帮助。

      【讨论】: