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/