2011-01-16 16 views
1

私はアプリケーションを持っていて、私の活動の1つでは、派生クラスが使用できるいくつかのヘルパーメソッドを含むベースアクティビティを作成しました。ジェネリックスを使用してアンドロイドビューを読み込もうとしています

私はここに、その怠惰なロードビューメソッドを持っているが、私はそのように呼んで私の派生クラスのコード

protected <T extends View> void loadView(T view, int id) { 
    if(view == null){ 
     view = (T)findViewById(id); 
    } 

です。

private Button btnAddAlarm 
... 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.timer_list); 

    loadView(btnDeleteAlarm, R.id.btnDeleteAlarm); //the view in the helper method loaded fine 
    btnDeleteAlarm.setEnabled(false); //Null pointer exception! 

問題は、参照が渡されていても、それは関数から出た後btnDeleteAlarmがNULLであることである。

私はしばらくの間でJavaを触れていないが、私はこのshouldn基本を覚えていれば参照を渡すときに起こることはありません。

答えて

2

btnDeleteAlarmに何かを割り当てたことはありません。 javaでは、メソッドは常に引数をコピーするので、loadViewは参照btnDeleteAlarmのコピーを取得し、コピーを変更する可能性がありますが、btnDeleteAlarmは変更されません。 loadViewメソッドが "view"を返し、onCreateメソッドでbtnDeleteAlarmに割り当てることができます。

+0

私が今見ているように、私は引数参照のコピーの私の頭にあったイメージを誤解しました。 – indigo0086

関連する問題