【问题标题】:Java: should I use "this" keyword or "m_" prefix? [closed]Java:我应该使用“this”关键字还是“m_”前缀? [关闭]
【发布时间】:2014-09-12 15:22:54
【问题描述】:

要引用实例变量,我应该使用“this”关键字吗...

class Foo
{
    private int bar;

    public Foo(int bar)
    {
    this.bar = bar;
    }
}

或“m_”前缀(匈牙利命名约定,其中 m 表示“成员变量”)...

class Foo
{
    private int m_bar;

    public Foo(int bar)
    {
    m_bar = bar;
    }
}

在任何情况下,一个比另一个更有优势吗?

【问题讨论】:

  • 你应该使用this,因为它实际上是Java风格和Java语法。
  • 这里有两个不同的问题 - 都是主观的。 1) 我不使用m_,2) 我只在需要时才使用this
  • @user2864740 OP 似乎提议在需要this 时使用“m_”。我相信到目前为止的共识是不要那样做。
  • @ElliottFrisch 我明白你的意思..但这似乎是一个愚蠢的提议。
  • @redFIVE 可能,使用this.bar = bar 更具可读性。我看到使用不同变量名的人往往是初学者或不放弃习惯的人。但随着时间的推移,我已经总是在内部使用this 引用类方法和字段。

标签: java instance-variables


【解决方案1】:

this 是标准的,更易读,更不容易出错。

当您错误地隐藏变量或尝试访问静态代码中的非静态字段时,它将为您提供帮助。

即避免这种情况

int m_bar;
public Foo(int m_bar)
{
  m_bar = m_bar;
}

和 静态 int m_bar;

int m_bar;
public Foo(int bar)
{
  this.bar = m_bar; // a warning static field being accessed as non-static
}

【讨论】:

  • 我不同意 - 但这是一个主观的问题/答案。我在需要的地方使用this(并且根本不用m_)。我的 IDE(去 JetBrains!)告诉我什么时候“错误”。
  • 你不应该依赖 IDE 的错误保护
  • 我同意这个答案,因为用户给出的示例是需要消歧的明显案例。 “m_”不遵循驼峰式变量名的通用标准,“this”是使用的通用标准。
  • @karyam 这两种情况出现的事实令人困惑,并导致一个糟糕的问题——因此我不同意最初的提议。 this 有时需要,但其他时候不需要。 m_ 只是一个约定。两种不同的[主观]案例。
  • @user2864740 但是,使用与属性名称相同的支持字段几乎是通用的 Java 用法。您不妨说以大写字母开头的 Java 类名是主观的。
【解决方案2】:

使用this。正是为这种用法提供了 Java 语法,开发人员熟悉它,并有助于减少几种极端情况下的语法错误。

在 Java 中为字段名称添加前缀的一个可能问题是生成 getter 和 setter 的工具无法正常工作。此外,Jackson 或 GS​​ON 等一些 Java Bean 工具现在需要映射来映射您的对象字段名称。最后,由于它不遵循 Java 风格或约定,maintenance developer 不会高兴。

【讨论】:

    猜你喜欢
    • 2011-10-20
    • 1970-01-01
    • 2012-06-20
    • 2013-05-23
    • 2013-02-05
    • 2010-12-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多