Sol*_*ace 0 java if-statement initialization local-variables
每当我在一个方法中声明一个局部变量然后在if/else块或try/catch等条件中为它赋值时,然后尝试返回变量,我得到编译器错误
The local variable XXX may not have been initialized
Run Code Online (Sandbox Code Playgroud)
我知道if/else或try/catch块可能不会在某些条件下执行,因此该变量将不会被初始化,从而导致错误.
但更多时候,我遇到的代码中,他们没有初始化变量,但仍然有效.对于例如,此页面上,看到下面的方法:
public int getItemViewType ( int position ) {
int viewType;
if ( groups.get ( position ).getImagePath () != null ) {
viewType = TYPE_IMAGE;
} else {
viewType = TYPE_GROUP;
}
return viewType;
}
Run Code Online (Sandbox Code Playgroud)
当我编写相同的方法时,我在return语句中得到了错误.我的方法与这个方法的唯一区别在于我只有if和else-if块,没有else块.
人们是否通过对方法或其他东西的一些注释来抑制这个错误,我不这么认为.
那么为什么他们不会得到错误,而我呢?
它起作用,因为当你到达return语句时,viewType保证有一个值.
int viewType;
if ( groups.get ( position ).getImagePath () != null ) {
viewType = TYPE_IMAGE;
} else {
viewType = TYPE_GROUP;
}
return viewType;
Run Code Online (Sandbox Code Playgroud)
它会有TYPE_IMAGE或者TYPE_GROUP
在您的代码中,您可能会做一些事情:
int viewType;
try{
// some code which can cause an exception.
viewType=something;
} catch(Exception e){}
return viewType;
Run Code Online (Sandbox Code Playgroud)
要么
int viewType;
if(some condition){
viewType=something;
}
return viewType;
Run Code Online (Sandbox Code Playgroud)
在这两种情况下,您都无法保证viewType在到达return语句时会有值.
如果try块抛出任何异常或块中的条件失败if,viewType则不会有任何值.
这就是为什么你会得到错误.但是在您发布的代码中并非如此,代码保证具有一定的价值.