Java函数中的final变量

标签 java jakarta-ee final

void function_ab(){

if ( a == true){
    final Class_A obj = new Class_A("a"); //This is an example scenario, so I couldn't create a setter to pass in "a" instead of passing it into Contructor.
}else{
    final Class_A obj = new Class_A("B");
}

// the code below will access obj object in Inner class.

}

我需要在声明后访问 obj,但由于它们是在“if” block 中声明的,因此之后我将无法访问它。我也不能做这样的事情:

void function_ab(){

final Class_A obj = null;
if ( a == true){
    obj = new Class_A("a"); //final variable cannot be changed.
}else{
     obj = new Class_A("B");
}

// the code below will access obj object in Inner class.

}

上面的代码无效。那么让它工作的唯一方法是将 obj 变量声明为类变量吗?我尽量避免这样声明,因为它仅在该函数中使用。

请告诉我是否有更好的方法来解决这个问题。

最佳答案

而不是使用:

final Class_A obj = null;

您应该能够使用

final Class_A obj;

这将允许您在 if 语句中初始化 obj - 有关更多信息,请查看 blank finals 的描述来自维基百科,这是我们都可以信赖的来源。

关于Java函数中的final变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13597584/

相关文章:

java - 如何在我的界面中为最终变量创建 Java 字段注释

constructor - 如何在构造函数中初始化最终类属性?

java - "static final int"是什么意思?

java - 我不知道如何通过递归合并来阻止 Stackoverflow 错误

java - ClientAbortException : java.net.SocketException:连接由对等方重置:套接字写入错误

java - 动态添加 Primefaces 组件

java - 使用 n 个应用程序服务器和 dao 作为 Web 系列扩展我的 Web 应用程序

java - 是否可以在 Spring 运行时 Autowiring 方法参数

java - 集合的 toString() 方法中的 StackOverflowError 是一个错误吗?

java - git clone 之后立即修改 Java 类(视为二进制文件)