私有对象字段可以是最终的,netbeans警告

时间:2018-10-25 15:08:13

标签: java netbeans

我收到与我的一个字段声明有关的警告,并想知道处理它的最佳做法是什么

public class ModeloCatalogo extends Modelo {

    private static ArrayList<String> excluidas = new ArrayList<>();
    ...bunch of irrelevant fields...

    private static void functionThatLoadsValuesIntoArrayList(){
        excluidas.add("String 1");
        ...
        excluidas.add("String n");
    }
    ...bunch of irrelevant methods...
}

在字段声明中,netbeans警告“字段可以是最终的”,可以通过以下方式解决:

    private static ArrayList<String> EXCLUIDAS = new ArrayList<>();

请注意,如果不是大写形式,由于命名约定,netbeans会生成不同的警告。 (为清楚起见,在编辑中添加了

对于命名约定,这应该是大写的,这使我感到畏缩,似乎并不正确。

通过在将值加载到数组中的函数内部初始化数组来消除警告。

    private static ArrayList<String> excluidas;

    private static void functionThatLoadsValuesIntoArrayList(){
        excluidas  = new ArrayList<>();
        excluidas.add("String 1");
        ...

但是它降低了代码的可读性,恕我直言。

所以这让我开始思考,摆脱警告的正确方法是什么?

1 个答案:

答案 0 :(得分:2)

NetBeans可能建议创建字段final,因为您仅在初始化期间为其分配了一个值,而不在此后重新分配它。

常量的命名约定在Java Language Specification中进行了说明,

  

[...]和类类型的最终变量通常可以是一个或多个单词,首字母缩写词或缩写的序列,全部为大写字母,并用下划线“ _”字符分隔

但是,it is argued可变的static final字段不应被视为常量,因此应使用常规字段命名。

如果类型可变,则较新版本的NetBeans不应显示描述的重命名字段警告,请参见this comment。确保您使用的版本是最新版本,并且尚未禁用此检查。


但是您确定该字段首先应该是static吗?如果方法functionThatLoadsValuesIntoArrayList可以在您当前的设计中为其分配一个值,则该字段可能不应该是静态的,尽管很难用这么小的代码段来说明。