我应该为对象使用常量吗?

问题描述 投票:0回答:1

我有一个类

StrLinkedList
,它是一个带有字符串值的链表类。

我正在通过制作乐透游戏来练习java,所以我有

winingNumbers
possibleNumbers
prizes
。所有 3 个都是
StrLinkedList
类的实例。除非您更改代码,否则
prizes
值永远不会改变,但要将值添加到此列表中,您可以使用
prizes.add(x)

我想知道,为了最佳实践,当我将此对象设置为全局对象时,是否有任何理由将其设置为常量?有人告诉我,所有变量都应该保持不变,除非它们确实需要改变。

public static final StrLinkedList prizes = new StrLinkedList();

我的想法是,因为我在定义对象后更改了对象中的值,所以它不应该是恒定的。但由于对象没有改变,只是一个属性,所以它将是一个常量。当我添加在程序中稍后不会改变的设定值时,它将是恒定的。

java oop
1个回答
0
投票

正如评论的那样,你正在混淆Java中的多个概念。

在您的代码中:

public static final StrLinkedList prizes = new StrLinkedList();
…你的变量

prizes

保存的不是一个列表,而是一个列表的
引用

通过将该变量标记为

final,您是在说只应将一个引用分配给该变量。正如 final

 一样,该变量永远不能被分配另一个引用,该变量也不能为 null(构造后)。因此,
final
变量并不是字面上的“变量”,因为它的值(引用)永远不会改变。

通过将该变量标记为

static

,您是在说每个类只需要一个变量,无论该类有多少个对象被实例化。所以静态变量不是面向对象的,它们是一种
全局变量。因此,通常不鼓励使用它们。

您似乎在说您的

StrLinkedList

 类是一个可修改的集合,能够添加或删除元素。

术语“常量”在 Java 上下文中没有精确的定义。但我认为大多数 Java 程序员都会期望该术语表示完全不变的值。因此,

final不可变

,因为对象的内容永远不会改变,如果是集合,则
不可修改

© www.soinside.com 2019 - 2024. All rights reserved.