正在初始化 "Default" 摘要 Java 中的最终属性 class

Initializing "Default" final attributes in Java abstract class

我有一个抽象class,它应该有一个(int)属性,在初始化后不能被修改并且被预先设置为1;最好的方法是什么? 我应该把它定下来吗? 要求是在 class 内部我将有一个且只有一个构造函数(带参数),并且没有设置器。 如果是这样,如果它是 final 并且(我想)我将在构造函数中初始化它,我如何默认将其设置为 1? 谢谢!

您应该使用带参数的构造函数来设置初始值。然后,正如您所说,不要创建任何 setter,并确保您的字段是私有的,这样就没有人可以访问它。

这样,您将做您想做的事,初始化字段但之后永远不会更改。

事实上,如果它始终是一个常量值,您甚至可以对其进行硬编码。

例如,如果您的变量应该始终为 25,您可以这样做:

public abstract class Test
{
  protected final int pressure = 25;

  //Constructor
  public Test()
  {
    // TODO Auto-generated constructor stub
  }
}

但是如果您在运行时评估该值,则需要在对象的构造函数中设置它:

public abstract class Test
{
  protected final int pressure;

  //Constructor
  public Test(int pressure)
  {
    this.pressure = pressure;
  }
}

请注意,在这种情况下,变量不能提前赋值!

问题是,是否应该使用 final 变量取决于它的用途。 final 变量在其整个生命周期内只能分配一次。如果您必须以任何形式修改它,则不应使用它。

您可以使用构造函数重载来实现此目的。看例子:

public abstract class TestClass{

  private final int otherParam;
  private final int fixedParam;

  public TestClass(final int otherParam){
    this.otherParam = otherParam;
    this.fixedParam = 1;
  }

  public TestClass(final int otherParam, final int fixedParam){
    this.otherParam = otherParam;
    this.fixedParam = fixedParam;
  }

}