0

一年前我开始学习 Java 时。作为一个 C 背景,我在 Java 中发现了很多严格的东西,例如由于无限循环导致的无法访问的语句等。

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

4

3 回答 3

1

这个表达有什么用吗

final String mainViewPaths[]={};

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

我们可以用那个空数组引用做什么?

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

您可以将其用于其运行时类型,如

myCollection.toArray(new String[0])

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

我们甚至不能重用变量,因为它是最终的

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

它不会导致任何编译器错误。

真的。

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

对学习语言的人无用或误导的事物与对专家或编写代码生成器的人无用或误导的语言特征不同。

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

于 2013-06-06T18:39:24.320 回答
1

像变量这样的空数组mainViewPaths可以用作Null Object

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

想象一下这个场景:

  • 有些变量是通过对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 变量之前,mainViewPaths变量不是使用空数组而是简单地null在上面的代码中使用 then 进行初始化,则应该检查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
    }
    
  • 因此,拥有一个Null ObjectlikemainViewPaths变量可以节省大量样板代码。

于 2013-06-06T18:39:43.323 回答
0

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

于 2013-06-06T18:38:01.583 回答