2017-09-15 36 views
1

Sonar Lint指出我應該引入一個新變量,而不是重新使用該參數。Android小部件和變量不應該被重新分配

在我extendedListView適配器

@Override 
    public View getGroupView(... , View convertView , ...){ 
    if(convertView == null){ 
     // gets the layoutInflater 
     convertView = inflater.inflate(R.layout.group_item, parent, false); 
    } 
    // then all the fill the list with data stuff 
    return convertView; 

    } 

聲納使得一個好點,我想我應該做些別的事情,但我不知道有什麼可以在這種情況下進行。我需要檢查convertView是否爲null,否則我會每次都替換它,但同時這個錯誤在任何標準的java代碼中都是有意義的,而不是在這個小部件內部。我將如何解決這個問題?

+0

重新分配變量不會取代它!你只是重新指定它的指針,這就是爲什麼它會警告你 – Kerooker

+0

我隱約記得這是java中的代碼異味,因爲編譯器沒有檢查它,並且在運行時你可能有一個NPE,在這種情況下,它會崩潰的應用程序,如果它返回null – h4mme7

回答

1

我其實並沒有看到你當前的代碼有什麼問題。如果你想避免這種警告,但是,你可以假裝你的方法ARG遊戲最後並執行以下操作...

@Override 
public View getGroupView(... , View convertView , ...){ 
    View myView = convertView; 
    if(myView == null){ 
    // gets the layoutInflater 
    myView = inflater.inflate(R.layout.group_item, parent, false); 
    } 
    // then all the fill the list with data stuff 
    return myView; 
} 

你棉短絨被標記的東西是在代碼風格的境界。 PMD也在類似的情況下標記代碼。通常情況下,我期望getView(...)方法非常簡潔,所以我不希望變量的重用導致任何混淆。