0

我是 Java 新手,无法了解枚举是否使最终变量过时?

4

5 回答 5

2

枚举和最终变量无关。在枚举之前,人们不得不求助于常量,但它们并不等价。

于 2012-06-27T05:17:05.703 回答
1

我假设在这个问题中你问的是整数常量而不是任何其他类型?如果不是,请记住枚举只能是枚举(整数),不能是特定类型。

否则……再一次,它不会使它们过时。枚举在只有(少量)有限数量的永远不会改变的可能性的情况下很有用。在这些可能是无限数量的事物(或大量事物)或并非全部完全定义但有些可以定义的情况下,这不是那么有用。

这真的取决于使用情况。

于 2012-06-27T05:27:52.747 回答
1

绝对不。Java 中的最终变量不仅仅是常量。

  • Final 可以应用于方法参数以提供编译时保证,防止重新分配。
  • Final 可以应用于局部变量,以提供编译时防止重新分配的保证。这对于实例化引用局部变量(也称为闭包)的匿名内部类也是必需的。
  • Final 可以应用于实例变量以保证这些字段的引用不变性。如果字段类型是不可变的或采取了适当的防御措施,这可以用来确保您的对象的不可变性,使其成为线程安全的。
  • Final 可以应用于方法以防止子类覆盖它们。
  • Final 可以应用于类以完全防止类的扩展。

final如您所见,关键字仍有很多用途。

于 2012-06-27T05:20:51.047 回答
0

如果您的意思是public static final int用作命名常量的变量,那么是的,枚举旨在代替它们使用。

然而,final 变量在一些地区仍然有用——特别是,闭包的使用需要它们,例如

final int foo = 3; // must be marked final
t = new Thread(new Runnable() { 
    public static void run() { 
        System.out.println(foo + 1);
    }
});
t.start();

此外,PSF 变量仍可用作配置常量。

于 2012-06-27T05:18:10.663 回答
0

两者都有不同的应用。枚举更适合状态机或值不相关的地方。我有一组最终变量,它们在我的一个程序中充当值和状态指示器。final 变量仍然有重要的应用,因为它们允许在整个程序中简单地修改字面值。

/简而言之

于 2012-06-27T05:18:34.250 回答