避免将null作为参数传递给构造函数

时间:2017-01-12 19:27:13

标签: java android

我在AsyncTask的单独文件中有一个DownloadImageAsyncTask .Java和我传递contextImageView作为参数构造函数。当AsyncTask进入onPostExecute()方法时,它会将图像分配给ImageView

稍后我意识到我需要将相同的代码用于我的应用的其他部分,但不是将图像分配给ImageView,而是将其作为背景图像分配给FrameLayout。< / p>

由于重复是编程中很多错误的根源,我如何重用AsyncTask以便它可以处理这两种情况并避免复制/粘贴代码?

我尝试使用如下构造函数:

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

我将ImageViewFrameLayout设置为null,但这对我来说并不合适。 (因为我知道我们应该避免将null作为参数传递)

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

您可以在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
}

答案 1 :(得分:1)

我会使用单独ImageViewFrameLayout的构造函数覆盖。然后在AsyncTask个方法中使用Object作为参数,在onPostExecute(Object result)中只需检查if(result instanceOf ImageView) else