当我1年前开始学习Java时。从C背景来看,我发现Java中有很多东西是严格的,例如由于无限循环而无法访问的语句等等。
那么,是否有使用变量声明final String mainViewPaths[]={};
?我们可以用这个空数组引用做什么?我们甚至无法重用该变量,因为它标记为final
。它不会导致任何编译器错误。我之所以这样问,是因为我认为Java开发人员会把所有可能没用或误导的东西放在一边。
答案 0 :(得分:1)
是否使用了表达式
final String mainViewPaths[]={};
这不是表达。它是一个字段或变量声明。
我们可以用那个空数组引用做什么?
您可以将其用作函数的返回值或参数。您可以将其分配给String[]
类型的字段或局部变量。
您可以将其用作
中的运行时类型myCollection.toArray(new String[0])
将空数组传递给集合,以便集合可以使用反射创建相同类型且大小合适的数组。
我们甚至无法重复使用该变量,因为它是最终的
我不知道你的意思。您可以根据需要重复使用它。你无法重新分配它。
它不会导致任何编译器错误。
真。
我之所以这样问是因为我认为Java开发人员会把所有可能没用或误导的东西放在一边。
对学习该语言的人没有用或误导的东西不同于那些对专家或编写代码生成器的人没有用或误导的语言特征。
语言设计者允许这样做,因为它是两个正交特征的组合,每个特征都是有用的 - 能够声明一个字段并初始化而不提两次字段名,以及构造长度为0的数组的能力。
答案 1 :(得分:1)
mainViewPaths
变量之类的空数组可用作 Null Object 。
在面向对象的计算机编程中,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变量之前,应该检查{{1变量为null,因此代码应如下所示:
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 Object
可以节省大量的样板代码。
答案 2 :(得分:0)
你无法真正改变它,但你仍然可以使用它。它实际上可能很有用。想象一下,emptyArray
命名。您可以在代码的其他部分使用它进行比较,如果其他代码可以修改它,那将是非常糟糕的。