我有一个类
StrLinkedList
,它是一个带有字符串值的链表类。
我正在通过制作乐透游戏来练习java,所以我有
winingNumbers
、possibleNumbers
和prizes
。所有 3 个都是 StrLinkedList
类的实例。除非您更改代码,否则 prizes
值永远不会改变,但要将值添加到此列表中,您可以使用 prizes.add(x)
。
我想知道,为了最佳实践,当我将此对象设置为全局对象时,是否有任何理由将其设置为常量?有人告诉我,所有变量都应该保持不变,除非它们确实需要改变。
public static final StrLinkedList prizes = new StrLinkedList();
我的想法是,因为我在定义对象后更改了对象中的值,所以它不应该是恒定的。但由于对象没有改变,只是一个属性,所以它将是一个常量。当我添加在程序中稍后不会改变的设定值时,它将是恒定的。
public static final StrLinkedList prizes = new StrLinkedList();
…你的变量prizes
保存的不是一个列表,而是一个列表的引用。 通过将该变量标记为
final,您是在说只应将一个引用分配给该变量。正如 final
一样,该变量永远不能被分配另一个引用,该变量也不能为 null(构造后)。因此,
final
变量并不是字面上的“变量”,因为它的值(引用)永远不会改变。通过将该变量标记为
static
,您是在说每个类只需要一个变量,无论该类有多少个对象被实例化。所以静态变量不是面向对象的,它们是一种全局变量。因此,通常不鼓励使用它们。 您似乎在说您的
StrLinkedList
类是一个可修改的集合,能够添加或删除元素。术语“常量”在 Java 上下文中没有精确的定义。但我认为大多数 Java 程序员都会期望该术语表示完全不变的值。因此,
final
,不可变
,因为对象的内容永远不会改变,如果是集合,则不可修改。