我有一个很多静态变量的classA。Java:将静态变量传递给构造函数?
如果我以静态方式访问另一个classB中的这些变量,即通过调用ClassA.variable或者将这些静态变量传递给classB的构造函数(并将其分配给static classB中的变量供以后使用)?你会用哪一个?
我有一个很多静态变量的classA。Java:将静态变量传递给构造函数?
如果我以静态方式访问另一个classB中的这些变量,即通过调用ClassA.variable或者将这些静态变量传递给classB的构造函数(并将其分配给static classB中的变量供以后使用)?你会用哪一个?
复制很多领域将是一个坏主意,因为它使维护变得复杂。
如果这些字段是真正可变的,而不是常量,那么您现在在两个不同的类中具有相同的命名变量。您必须记住在更新其中一个代码的代码中的所有位置更新每个值的两个副本。
即使字段是常量,复制它们混淆了它们的含义和目的。理想情况下,程序中应该只有一个地方定义了这些值,这应该是与他们所做的事情最相关和最有意义的类。
另一个考虑是,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
。这种用法令人不悦,因为它可以很容易地弄清楚变量来自哪里,但如果有几个变量正在使用许多次,它可能是一个明确的胜利。
_I有一个有很多静态变量的classA。** **警钟如果你想编写可测试代码,然后把这些'static'变量传递给构造函数。如果你想编写可维护的代码,尽可能多地去除'static'变量。 '静'是邪恶的! – 2014-10-05 14:07:12
2个人(包括我自己)已经告诉你,在你的[上一个问题]中使用可变静态字段是不好的设计(http://stackoverflow.com/questions/26201432/junit-initialization-of-static-fields)。你还需要相信多少呢? – 2014-10-05 14:10:04
您不通过*变量*,通过* values *。这些值来自哪里没有区别。 – 2014-10-05 14:23:53