[英]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.