正在初始化 "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;
}
}
我有一个抽象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;
}
}