【问题标题】:Is it a good programming practice to use import static fields? [duplicate]使用导入静态字段是一种好的编程习惯吗? [复制]
【发布时间】:2011-09-23 22:52:15
【问题描述】:

我在 SQLiteOpenHelper 类中声明了一些常量变量:

public static final String USERNAME = "user_name";
public static final String PASSWORD = "password";

在我创建 SQL 查询的 Activity 中,我导入这些字段:

import com.mygame.ui.login.LoginInfoSQLiteOpenHelper.*;

这是一个好习惯吗?
还是用传统的方式更好地引用常量?

LoginInfoSQLiteOpen.USERNAME

【问题讨论】:

    标签: java android static import


    【解决方案1】:

    晚了几年……但我觉得提供相反的观点是值得的。 Java 设计为具有静态字段导入是有原因的,原因是隐藏类是如何实现给类的用户的。这是面向外代码的重要设计原则。我同意 c00kiemon5ter 的做法,但是,在某些情况下它可能是值得的。

    更多关于静态字段导入的信息可以在这里找到:https://docs.oracle.com/javase/1.5.0/docs/guide/language/static-import.html

    【讨论】:

      【解决方案2】:

      如果您查看某人的代码并看到类似的字段

      foo.do(baz, USERNAME); 
      

      wut(!),那个 var 是从哪里来的?
      搜索,grep,它在哪里声明?

      将其用作ClassName.FIELD 会使事情变得更加清晰和清晰。 您可以避免混淆,有时使用一个正确的类名来表示该字段比使用一个凭空出现的字段更有意义。


      嗯,不是每个人都使用 IDE,也不是每个人都通过 IDE 读取代码(可能通过网络上的存储库),甚至有些人认为 VIM 是 IDE,我确实经常使用 vim(虽然我不将其视为 IDE)。
      因此,这不是关于 IDE 能做什么或不能做什么,而是更多代码阅读 是关于什么的。代码阅读、代码质量、表达想法在您选择的编程语言中,以一种抽象的方式,有意义并很好地结合在一起。

      【讨论】:

      • 什么,您的 IDE 没有显示 USERNAME 是什么以及它来自哪里? ;-) [我确实喜欢这个答案——总的来说——不过。]
      • 顺便说一句,使用import package.* 通常被认为是不好的做法。最好用明确的import package.SomeClass 语句替换它。
      • 我同意这一点,这又是一个代码阅读问题,与某些人倾向于认为的任何类型的性能问题完全无关。
      • 虽然我大体上同意,但我有一个例外,那就是在 JUnit 测试中使用 assertXX()。这只是因为使用它们的特定上下文。
      • @Ivan c00kiemon5ter V Kanak:感谢您的意见。这为我打消了疑虑。了解使我们的代码更清晰易读的正确且良好的编程方法总是很好的。
      【解决方案3】:

      我推荐第二种方法,只导入类而不导入字段。所以在你的常量前面加上所属的类,比如LoginInfoSQLiteOpen.USERNAME。它可能变得非常冗余,但从长远来看,它更具可读性和可维护性。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-09-16
        • 2012-03-10
        • 2018-02-25
        • 1970-01-01
        • 2011-02-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多