gpt4 book ai didi

java - Java 中的最终初始化可以推迟,这如何防止无意中返回 null?

转载 作者:行者123 更新时间:2023-11-29 08:19:51 25 4
gpt4 key购买 nike

在“java的隐藏特性”问题中,有人提到可以推迟最终初始化并提供了一个例子:

public Object getElementAt(int index) {
final Object element;
if (index == 0) {
element = "Result 1";
} else if (index == 1) {
element = "Result 22";
} else {
element = "Result 3";
}
return element;
}

海报说:

It's too easy to miss a case and return null by accident. It doesn't make returning null impossible, just obvious that it's on purpose.

但是我无法理解这意味着什么。如果元素没有声明为 final,这有什么不同? else 语句不是总能确保不返回 null 吗?我认为这更像是一种装饰性的东西,而不是实际影响代码运行的方式。

最佳答案

你发布问题的方式,发帖者似乎在说如果你这样做了:

 Object element = null;

然后通过 if 方法设置它,你可能会意外返回 null(如果你没有正确构造你的 else 语句),所以要利用最终初始化可以不同于声明后的事实。

但是,这个例子是多余的,因为编译器保证这个变量在使用之前被设置,因为它是本地的。

更有趣的是这样的情况:

public class SomeClass {
private final Object element;

public SomeClass(int index) {
if (index == 0) {
element = "Result 1";
} else if (index == 1) {
element = "Result 22";
} else {
element = "Result 3";
}
}
}

在这种情况下,如果您从未设置元素,而不是为您将其设置为 null,编译器将警告您,如果未将其声明为 final,则会发生这种情况。

总而言之,有趣的是,final 字段或变量不必在声明的地方设置(正如您可能倾向于认为的那样)。 final 意味着它只能被设置一次给定值,而不是必须在声明的同一行设置。

关于java - Java 中的最终初始化可以推迟,这如何防止无意中返回 null?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/962400/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com