簡體   English   中英

避免將null傳遞給構造函數作為參數

[英]Avoid passing null to constructor as param

我在一個單獨的文件中有一個AsyncTask作為DownloadImageAsyncTask .java,並且我將contextImageView傳遞給構造函數作為參數。 當AsyncTask進入onPostExecute()方法時,它將圖像分配給ImageView

后來我意識到我需要對應用程序的另一部分使用相同的代碼,但是除了將圖像分配給ImageView我還需要將其作為背景圖像分配給FrameLayout

由於重復是編程中許多錯誤的根源,我如何重用AsyncTask使其能夠處理兩種情況並避免復制/粘貼代碼?

我嘗試了類似的構造函數:

public DownloadImageAsyncTask(Context context, ImageView ivCover, FrameLayout flCover) {
    this.context = context;
    this.ivCover = ivCover;
    this.flCover = flCover;
}

我將ImageViewFrameLayout設置為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
}

我將對單獨的ImageViewFrameLayout進行構造函數重寫。 然后在AsyncTask方法內部使用Object作為參數,然后在onPostExecute(Object result)檢查if(result instanceOf ImageView) else

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM