是否有使用final String mainViewPaths[]={};



当我一年前开始学习Java时。作为一个C背景的人,我发现Java严格的很多东西,比如由于无限循环而无法到达的语句,等等。

那么,变量声明final String mainViewPaths[]={};有什么用吗?我们可以对空数组引用做什么?我们甚至不能重用这个变量,因为它被标记为final。它不会导致任何编译器错误。我之所以问这个问题,是因为我认为Java开发人员将所有可能无用或误导的东西放在一边。

mainViewPaths变量这样的空数组可以用作Null对象

在面向对象的计算机编程中,Null对象是具有定义中性("Null")行为的对象。

想象一下这个场景:

  • 有一些变量是通过引用mainViewPaths变量初始化的,例如

    String loginViewPaths[] = mainViewPaths; 
    String homeViewPaths[] = mainViewPaths;
    
  • 源代码中有很多地方可以访问ViewPaths变量,例如:

    public String toString() {
        return mainViewPaths.toString();
    }    
    for(int i = 0; i < mainViewPaths.length; i++) {
        // iterate over all the mainViewPaths elements
    }
    
  • 如果mainViewPaths变量不是用空数组初始化,而是简单地用null初始化,那么在访问mainViewPaths变量之前,应该在上面的代码中检查mainViewPaths变量是否为空,所以代码应该看起来像:

    public String toString() {
        return mainViewPaths != null ? mainViewPaths.toString() : null;
    }    
    for(int i = 0; i < mainViewPaths == null ? 0 : mainViewPaths.length; i++) {
        // iterate over all the mainViewPaths elements
    }
    
  • 所以像mainViewPaths这样的Null Object变量可以节省很多样板代码。

表达式

有什么用吗?
final String mainViewPaths[]={};

这不是表达式。它是一个字段或变量声明。

如何处理空数组引用?

可以用作函数的返回值或参数。您可以将其分配给String[]类型的字段或局部变量。

您可以使用它作为其运行时类型,如

myCollection.toArray(new String[0])

,将空数组传递给集合,以便集合可以使用反射来创建相同类型和适当大小的数组。

我们甚至不能重用这个变量,因为它是final

我不知道你这是什么意思。你可以随心所欲地重复使用它。你只是不能重新分配它。

不会导致任何编译错误。

我问这个问题是因为我认为Java开发人员把所有可能没用或误导的东西都放在一边。

对于学习这门语言的人来说无用或误导的东西与那些对于专家或编写代码生成器的人来说无用或误导的语言特性是不同的。

语言设计者允许这样做,因为它是两个相互正交的特性的组合,每个特性都很有用——声明字段和初始化而不需要两次提到字段名的能力,以及构造长度为0的数组的能力。

你不能真的改变它,但你仍然可以使用它。它实际上是有用的。想象一下将其命名为emptyArray。你可以在代码的其他部分使用它进行比较,如果其他代码可以修改它,那将是非常糟糕的。

最新更新