java - 可以从构造函数调用 Private Final 方法吗?

标签 java constructor

我知道您可以从构造函数中调用一个方法,但是如果该方法可以被覆盖,它可能会在以后导致问题。以下代码只是我为演示我的问题而编写的示例:

假设我有以下子类:

private boolean isActive;

public ChargeGun(String gameObjectID, String gameObjectName, String desc, int numberofshots, int damage, boolean isActive) {
    super(gameObjectID, gameObjectName, desc, numberofshots, damage);

    setAttributes(isActive);

}

public ChargeGun(String gameObjectID, String gameObjectName, int numberofshots, int damage, boolean isActive) {
    super(gameObjectID, gameObjectName, numberofshots, damage);

    setAttributes(isActive);

}

private final void setAttributes(boolean isActive)
{
    this.isActive = isActive;
}

boolean isActive 特定于 ChargeGun 而不是任何其他枪支。假设我的子类中有两个构造函数,而不是键入 isActive = true 两次,我可以调用一个 private final 方法 来完成它吗?原因是,如果我的 ChargeGun 属性增长,那么我将不得不在两个构造函数中添加属性。如果我使用 private final 方法来做,一切都设置在一个地方。这是不好的做法吗?

我无法链接 ChargeGun 构造函数,因为它们都调用父类(super class)构造函数。

最佳答案

private 方法不能被覆盖,您也不需要将其标记为final(这也意味着它不能被覆盖)。 final private 之一就足够了。但是,该方法需要稍微修改一下。喜欢,

private void setAttributes(boolean isActive)
{
    this.isActive = isActive;
}

您的版本总是将其设置为true。如果那是故意的,我会完全删除 setter,然后做类似的事情

private final boolean isActive = true;

这是不可变字段的声明初始化

关于java - 可以从构造函数调用 Private Final 方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36753626/

相关文章:

java - NetBeans 中的 "No primary keys"错误

java - 使用状态来管理 onTouchEvent

c# - 类继承和构造函数

c++ - 如何使我的 uninitialised_allocator 安全?

java构造函数来创建已经正确的子类

java - 用于近似字符串匹配的示例 java 代码或用于近似字符串匹配的 boyer-moore 扩展

java - 如何在多列 linkki 部分中跨越多列

java - 从类方法显示进度对话框

c# - 必须是具有公共(public)无参数构造函数的非抽象类型

vb.net - 如何在对象的构造函数完成后立即触发事件?