【问题标题】:Naming convention for objects in JavaJava中对象的命名约定
【发布时间】:2012-04-27 05:42:41
【问题描述】:

我在 2 年前就开始使用 Java 编程。当时我们项目中的前辈曾建议我将“obj”附加到正在创建的对象的名称中。

例如:

Car objCar = new Car("Ferrari");

这里objCar 就是我要说的。但是 Stack Overflow 的许多人反对它,现在我发现这不应该是对象命名的方式。我很清楚使用集合时的命名约定,但是当创建通用类的对象时我很困惑。

谁能解释一下?

【问题讨论】:

  • Java 中除了原始类型之外的所有东西都是对象。你会在每个变量名前面加上obj 吗?
  • 这个obj... 的东西,如果来自旧时代的话。
  • 如果对你来说识别你的属性更简单......为什么不使用“obj”
  • 对象没有名字。 变量有名字。

标签: java naming-conventions


【解决方案1】:

就叫它car吧。 Hungarian notation 未被 Sun/Oracle 使用。

以描述其用途的方式命名您的变量。但是你不需要在变量名中指明类型。您已经在变量声明中指定了类型。如果您将鼠标悬停在 IDE 上,IDE 会向您显示变量的类型,以便随时获取信息。

您应该使用lowercaseStartingCamelCase 作为变量名和方法名,使用UppercaseStartingCamelCase 作为类名。

如果你想了解 Sun/Oracle 是如何做事的,你可以阅读他们的Code Conventions for the Java Programming Language

【讨论】:

  • 对象的命名标准是什么?只是以小写字母开头的类名?
  • @Ajj 考虑将其命名为有意义的名称,例如它的作用/用途。这就是“标准”。如果您的意思是语法标准,变量名称以小写字母开头并使用驼峰式。
  • 对访问器和修改器方法命名很好。我只是对“汽车”、“学生”、“机器”等普通课程感到困惑。
  • 以实际用途命名,而不是类名。这没有一般规则。
  • 感谢格雷格的链接。之前浏览过它,但有助于我澄清我的疑问。无论如何,现在我明白了应该完全省略匈牙利的命名方式。
【解决方案2】:

你的例子有点太琐碎了。实际上,您永远不会将对象类型“Car”的字段命名为“car”。同样,您永远不会将“整数”类型命名为“整数”。

相反,使用名称告诉读者该字段的用途。一些例子:

private Transport preferredTransportMethod;

private int invoiceCounter;

不常用的前缀字段类型是Java。但是,类成员有时会以小写“m”作为前缀,以防止在 setter 方法中意外自赋值。

private long mTripDurationMillis;

【讨论】:

    【解决方案3】:

    为您的对象命名,这样可以更轻松地阅读和重构。

    【讨论】:

      【解决方案4】:

      java 中对象的命名约定只是名称。 例如

      Car car = new Car("Ferrari");
      

      匈牙利符号的残余已被废弃,主要是因为 IDE 为导航提供了额外的支持。

      【讨论】:

        【解决方案5】:

        小写字母的类名是 Sun/Oracle 标准。

        当你在一家公司工作时,

        根据项目命名约定,可能会有所不同。

        Car car=new Car(); //good to follow
        

        如果是Singleton pattern,你可以给下面这样的名字

         private static final Car singletonCar=new Car();
        

        【讨论】:

        • 不应在字段名称中标识单例。它们是单例的事实应该仅在字段初始化时可见。如果需要其他东西,那么它就是做错事的信号。在您的示例中,错误的是您允许多个 Car-singleton 实例。
        • 已编辑。创建单例的方法有很多,它就是其中之一。维护这种命名约定只是为了便于阅读。
        • 单例的思想是你只能初始化对象的一个​​实例。 final 字段不会阻止您创建两个 Car 对象。您必须将限制构建到 Car 对象本身中。初始化单例有很好的记录。请谷歌它。一旦您获得了对单例的引用,就不需要在字段名称中将其标记为单例。单例应该以一种健壮的方式实现,用户在初始化后不必知道它。它应该像许多线程共享的任何其他对象一样工作。
        • 只是我再次说有 n 种方法来创建单例,这是一种,当然传统方式,你只需通过维基百科链接,关于单例的讨论在这里是偏离轨道的。而且,当我提供 singletonCar 时,它是针对所有团队成员的,当您在一个团队中工作时,所有团队成员的知识水平可能不同,我们不能假设。这是为了代码的可读性和可维护性。跨度>
        【解决方案6】:

        如果你使用更多的对象,我会这样做:

        Car carFerrari = new Car("Ferrari");
        Car carFord = new Car("Ford");
        Car carAudi = new Car("Audi");
        

        当然,名称可以是“ferrari”、“ford”和“audi”,但我喜欢指代相同类型的对象。

        【讨论】:

          【解决方案7】:

          你年纪大了,毕竟我可以建议你一些命名 与您的疑问有关的约定。我们知道所有的类名都是 以第一个大写字母开头,假设类“MyTest” 我们需要为这个类创建的对象应该是“mytest”。 对象名称应采用此格式。根据雅加达 项目宣言我发现了这种类型的对流并且是 下列的 。除了 jakarta,Sun API 包括 IDE 开发他们也在使用这个。 希望对您有所帮助。是的,我是新手。感谢您提供的有用信息。

          【讨论】:

          • Manoj,看来您是 SO 新手。亲爱的等,SO中不支持的术语和答案不需要进行代码格式化。
          猜你喜欢
          • 1970-01-01
          • 2010-12-16
          • 1970-01-01
          • 2021-12-04
          • 2012-03-17
          • 1970-01-01
          • 2017-03-10
          • 1970-01-01
          • 2020-03-13
          相关资源
          最近更新 更多