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

Java:将静态变量传递给构造函数?,java,constructor,static,Java,Constructor,Static,我有一个有很多静态变量的classA 如果我以静态方式访问另一个classB中的这些变量,即仅调用ClassA.variable,或者如果我将这些静态变量传递给classB的构造函数并将其分配给classB中的静态变量以供以后使用,这会有什么不同吗?你会用哪一个 复制多个字段是个坏主意,因为这会使维护复杂化 如果这些字段是真正的变量,而不是常量,那么现在在两个不同的类中有同名的变量。您必须记住在代码的所有地方更新每个值的两个副本,在这些地方您可以更新其中一个 即使字段是常量,重复它们也会混淆其含

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


如果我以静态方式访问另一个classB中的这些变量,即仅调用ClassA.variable,或者如果我将这些静态变量传递给classB的构造函数并将其分配给classB中的静态变量以供以后使用,这会有什么不同吗?你会用哪一个

复制多个字段是个坏主意,因为这会使维护复杂化

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

即使字段是常量,重复它们也会混淆其含义和用途。理想情况下,在程序中应该只有一个地方定义这些值,这应该是与它们的工作最相关、最有意义的类

另一个需要考虑的问题是,A类和B类的关系有多密切?如果希望将这些值作为参数传递的原因是ClassB有时可能希望被其他类而不是ClassA使用,那么传递参数是有意义的,因为您不能硬编码对ClassA中原始字段的引用。但是,如果有许多这样的参数,它是笨拙的。在这种情况下,您可以使用单独的类来保存这些类共享的配置状态。ClassA和类似的类将创建和初始化配置类的实例,并将其作为单个参数传递给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。这种用法是不受欢迎的,因为它很容易让人混淆变量的来源,但如果有几个变量被多次使用,这可能是一个明确的胜利。

我有一个classA,有很多静态变量。警钟。如果要编写可测试代码,请将这些静态变量传递到构造函数中。如果您想编写可维护的代码,那么就删除尽可能多的静态变量。静电是邪恶的!包括我在内的两个人已经告诉过你,在你的设计中使用可变静态字段是不好的。你还需要相信多少?你不是在调用中传递变量,而是传递值。这些值从哪里来没有区别。谢谢。那么,我应该删除所有静态变量,而不是将非静态变量传递给方法吗?我将值分配给main方法中的字段,因此字段必须是静态的,否则会出现编译器错误。