Java:将静态变量传递给构造函数?

时间:2014-10-05 14:04:51

标签: java constructor static

我有一个包含很多静态变量的classA。

如果我以静态方式访问另一个classB中的这些变量,即通过调用ClassA.variable或者如果我将这些静态变量传递给classB的构造函数(并将其赋值给它),它会有所不同吗? classB中的静态变量供以后使用)?你会用哪一个?

1 个答案:

答案 0 :(得分:0)

复制许多字段不是一个好主意,因为它会使维护变得复杂。

如果这些字段是真正可变的,而不是常量,那么现在在两个不同的类中具有相同名称的变量。您必须记住在代码中更新其中任何一个的所有位置更新每个值的两个副本。

即使字段是常量,重复它们也会混淆它们的意义和目的。理想情况下,程序中应该只有一个位置可以定义这些值,这些位置应该是最相关且最有意义的类。

另一个考虑因素是,ClassA和ClassB有多密切相关?如果您希望将这些值作为参数传递的原因是因为ClassB有时可能希望由另一个类而不是ClassA使用,那么传递参数是有意义的,因为您无法硬编码对ClassA中原始字段的引用。但如果有很多这样的参数,那就太笨重了。在这种情况下,您可以使用单独的类来保存类共享的配置状态。 ClassA(以及类似的类)将创建和初始化Configuration类的实例,并将其作为单个参数传递给ClassB。 Configuration类是唯一需要声明和记录许多变量的地方。

另一方面,如果你的两个类是同一个应用程序的两个不可分割的部分,那么ClassB总是指望ClassA在那里,那么间接是没有必要的。那么问题又变成了,你真的想在ClassB中复制这些字段吗?

如果您真正想要的是减少在事物前面输入ClassA.,请在ClassB顶部使用静态导入:

import static packageName.ClassA.*; // imports all static members
import static packageName.ClassA.fieldX; // imports a specific thing selectively

然后,您可以简单地将事物称为field1,而不是ClassA.field1。这种用法是不受欢迎的,因为它很容易让人感到困惑,无法找到变量的来源,但如果使用了少量变量很多次,那么它可能是一个明确的胜利。

相关问题