[英]Avoid passing null to constructor as param
我在一個單獨的文件中有一個AsyncTask
作為DownloadImageAsyncTask
.java,並且我將context
和ImageView
傳遞給構造函數作為參數。 當AsyncTask進入onPostExecute()
方法時,它將圖像分配給ImageView
。
后來我意識到我需要對應用程序的另一部分使用相同的代碼,但是除了將圖像分配給ImageView
我還需要將其作為背景圖像分配給FrameLayout
。
由於重復是編程中許多錯誤的根源,我如何重用AsyncTask
使其能夠處理兩種情況並避免復制/粘貼代碼?
我嘗試了類似的構造函數:
public DownloadImageAsyncTask(Context context, ImageView ivCover, FrameLayout flCover) {
this.context = context;
this.ivCover = ivCover;
this.flCover = flCover;
}
我將ImageView
或FrameLayout
設置為null,但我覺得FrameLayout
。 (因為我知道我們應該避免將null作為參數傳遞)
有任何想法嗎?
您可以在DownloadImageAsyncTask
類中使用所謂的重載構造函數。 這與如何使用相同名稱的多個具有不同參數的方法非常相似。
public DownloadImageAsyncTask(Context context, ImageView ivCover)
{
this.context = context;
this.ivCover = ivCover;
}
public DownloadImageAsyncTask(Context context, FrameLayout flCover)
{
this.context = context;
this.flCover = flCover;
}
要檢查結果變量的運行實例,可以執行以下操作,盡管您可能還希望進行一些null
檢查
if(result instanceOf ImageView)
{
// do stuff
}
else if(result instanceOf FrameLayout)
{
// do stuff
}
else
{
// do other stuff
}
我將對單獨的ImageView
和FrameLayout
進行構造函數重寫。 然后在AsyncTask
方法內部使用Object
作為參數,然后在onPostExecute(Object result)
檢查if(result instanceOf ImageView) else
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.