【问题标题】:Java basics, using this for constructor [duplicate]Java基础知识,将其用于构造函数[重复]
【发布时间】:2017-12-13 14:39:45
【问题描述】:

我正在自学Java。我读了这段代码,我需要一个解释。

为什么在这段代码(复制自https://www.javatpoint.com/aggregation-in-java)中使用了this

不等于在方法中有不同的局部变量名比如:

public Address(String i, String j, String k) 而只是使用city=i 代替?

这里有使用this.city=city 的理由吗? 谢谢。

public class Address {
    String city,state,country;

    public Address(String city, String state, String country) {
        this.city = city;
        this.state = state;
        this.country = country;
    }
}

其实我会把代码写成:

public class Address
{
    String city,state,country;

    public Address(String tempCity, String tempState, String tempCountry) {
        mycity = tempCity;
        state = tempState;
        country = tempCountry;
    }
}

与第一个版本相比,第二个版本的优点和缺点是什么?

【问题讨论】:

  • 这不是关于使用“this”,因此不是重复,而是当你有替代方案时更多的最佳实践。我个人认为没有理由在这里使用“this”和重复的变量名。
  • 我想说这个问题的一半或三分之一与其中一个答案的一小部分重叠。这不是明确的 1 对 1 重复
  • 如果一个问题确实是重复的或离题的,它仍然留给密切的选民。只要问题是开放的,并且如果您个人认为它不是重复或离题或任何此类问题,那么您应该回答这个问题。在很多情况下,只有一些人认为它是重复的/OT(不足以关闭),在这种情况下,欢迎回答。虽然我不喜欢否决坏问题的好答案,但你当然应该等到收盘被接受。

标签: java constructor this


【解决方案1】:

至于为什么这实际上很常见:IDE 提供自动分配。例如,您在 Eclipse 中所做的就是输入

class Address {
    public Address(String city, String state, String country) {}
}

并且 Eclipse 会警告您该方法中未使用参数 citystatecountry。 因此,您可以做的是触发自动修复,其中之一是“分配给新字段”,它将在类中创建字段并在构造函数中分配它们。然后字段名称将与参数相同,因此需要以 this. 为前缀,以便它们引用字段,而不是参数。

【讨论】:

    【解决方案2】:

    这里使用 this.city=city 有什么原因吗?

    在这种情况下,使用this.city = city; 是为了防止对读者(和编译器)产生歧义

    替代方案是city = city;,但具体设置哪个city 并不明显

    (并且在这种情况下不修改类变量)

    相关:Answer to When should I use “this” in a class?, case 1

    不等于在方法中有不同的局部变量名

    是的,使用不同的变量名可能更简洁

    (有些人更喜欢同名,只是匹配,我更喜欢首字母:city = c

    与第一个版本相比,第二个版本的优点和缺点是什么?

    这是一种风格,如果你和其他人一起编程,最好有相同的风格

    如果您所在的公司以一种方式做事,而您开始以不同的方式做事,那么维护代码库会变得更加困难

    相关:Is Programming Style important? How Important?

    【讨论】:

    • 其实i for city 不是cleaner,而是city = cityName
    • 我怀疑 ijk 只是例子,它可以是任何东西,如果它们被实际使用,那么它会更难遵循(比 @987654333 @或cityName)
    • “替代方案是city = city;,但具体设置哪个城市并不明显” - 没有替代方案,完全错误。
    • @Tom 替代使用this.,同时仍将两个变量保留为city,它不保留相同的功能,但是很多人尝试使用它并以意想不到的结果返回。设置了哪个city 并且不会抛出错误,直观上并不明显
    • 好的,编辑清楚地说明了您的意思。乍一看,您似乎建议将其作为一种可行的替代方案(这可能不太容易理解)。
    【解决方案3】:

    请注意,您将city 作为类中的字段,并且它也是函数传递的参数。 为了将传递的参数分配给城市字段,使用this.city

    【讨论】:

      【解决方案4】:

      他们在这里使用this.city的原因是,正如你所说,本地参数名称city与类变量不明确。

      使用this 访问类变量的另一点是它可以使代码更具可读性,因为即使您没有看到声明,您也可以立即知道它是一个类变量。

      【讨论】:

        【解决方案5】:

        不等于方法中有不同的局部变量名吗 例如:公共地址(字符串 i,字符串 j,字符串 k),只需使用 city=i 而不是?

        是的。
        但是,在为字段分配参数时,在参数中使用与在字段中相同的名称可能会更清楚。

        city 字段代表city
        为什么在参数中使用另一个名称?
        就个人而言,在参数名称中用icityP 表示它会变得不太清楚。 之后,这是一个品味问题。

        【讨论】:

          猜你喜欢
          • 2012-10-05
          • 1970-01-01
          • 2011-06-01
          • 2014-06-19
          • 2017-04-22
          • 2017-10-27
          • 2013-03-23
          • 1970-01-01
          • 2022-12-03
          相关资源
          最近更新 更多