空白的最终字段 INITIAL 可能尚未初始化

2022-09-04 06:53:19

我正在用Java编程。我已经为每个方法添加了注释,以解释他们应该做什么(根据任务)。我已将我所知道的添加到存根中(这是我在研究了学校提供的javadoc后创建的)。我的问题不是关于几个函数,我知道testWord和setWord中存在错误,但我会自己处理。我的问题是关于这行的:Password.java

public static final java.lang.String INITIAL;

这行是由学校提供的,所以我必须假设它是正确的,我无法在任何地方找到任何关于常量字段值INITIAL的文档,所以如果有人能为我提供有关该值的信息,那将是惊人的(例如,如何处理?它存储什么?如果有的话?类型?)。另外,我在Eclipse中的这一行上也得到了一个错误:

空白的最终字段 INITIAL 可能尚未初始化

为什么会出现此错误?提前感谢评论。

仅供参考 密码中的代码.java:

package ss.week1;

public class Password extends java.lang.Object {

// ------------------ Instance variables ----------------

/**
 * The standard initial password.
 */

public static final java.lang.String INITIAL;

// ------------------ Constructor ------------------------

/**
 * Constructs a Password with the initial word provided in INITIAL.
 */

public Password() {

}

/**
 * Tests if a given string is an acceptable password. Not acceptable: A word
 * with less than 6 characters or a word that contains a space.
 * 
 * @param suggestion
 * @return true If suggestion is acceptable
 */

// ------------------ Queries --------------------------

public boolean acceptable(java.lang.String suggestion) {
    if (suggestion.length() >= 6 && !suggestion.contains(" ")) {
        return true;
    } else {
        return false;
    }
}

/**
 * Tests if a given word is equal to the current password.
 * 
 * @param test Word that should be tested
 * @return true If test is equal to the current password
 */

public boolean testWord(java.lang.String test) {
    if (test == INITIAL) {
        return true;
    } else {
        return false;
    }
}

/**
 * Changes this password.
 * 
 * @param oldpass The current password
 * @param newpass The new password
 * @return true if oldpass is equal to the current password and that newpass is an acceptable password
 */

public boolean setWord(java.lang.String oldpass, java.lang.String newpass) {
    if (testWord(oldpass) && acceptable(newpass)) {
        return true;
    } else {
        return false;
    }
}
}

答案 1

错误正是编译器所说的 - 你有一个最终字段,但没有设置它。

最终字段需要精确分配一次。你根本没有分配给它。除了文档(“标准初始密码”)之外,我们不知道该字段的含义 - 大概有一些默认密码是你应该知道的。您应该将该值分配给字段,例如

public static final String INITIAL = "defaultpassword";

另外:你不需要写;只需使用短名称()。在代码中使用完全限定的名称很少是一个好主意;只需导入您正在使用的类型,并注意其中的所有内容都是自动导入的。java.lang.StringStringjava.lang

另外:不要使用 ==; 使用 .equals 来比较字符串

另外:任何时候你有这样的代码:

if (condition) {
    return true;
} else {
    return false;
}

你可以这样写:

return condition;

例如,您的方法可以写为:acceptable

public boolean acceptable(String suggestion) {
    return suggestion.length() >= 6 && !suggestion.contains(" ");
}

答案 2

我在提供的密码.java的任何地方都没有看到分配静态最终初始值的地方。这一定是这里的问题所在。


推荐