Java 避免将null作为参数传递给构造函数
我在一个单独的文件中有一个Java 避免将null作为参数传递给构造函数,java,android,Java,Android,我在一个单独的文件中有一个AsyncTask,名为DownloadImageAsyncTask.java,我正在将一个ImageView作为参数传递给构造函数。当AsyncTask进入onPostExecute()方法时,它将图像分配给ImageView 后来我意识到我需要对我的应用程序的另一部分使用相同的代码,但我需要将图像作为背景图像分配给框架布局,而不是将图像分配给图像视图 由于重复是编程中许多错误的根源,我如何重新使用AsyncTask,使其能够处理这两种情况并避免复制/粘贴代码 我尝试
AsyncTask
,名为DownloadImageAsyncTask
.java,我正在将一个ImageView
作为参数传递给构造函数。当AsyncTask进入onPostExecute()
方法时,它将图像分配给ImageView
后来我意识到我需要对我的应用程序的另一部分使用相同的代码,但我需要将图像作为背景图像分配给框架布局,而不是将图像分配给图像视图
由于重复是编程中许多错误的根源,我如何重新使用AsyncTask
,使其能够处理这两种情况并避免复制/粘贴代码
我尝试了一个构造函数,比如:
public DownloadImageAsyncTask(Context context, ImageView ivCover, FrameLayout flCover) {
this.context = context;
this.ivCover = ivCover;
this.flCover = flCover;
}
在这里,我将ImageView
或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
}
您可以在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(ImageView的结果实例)
否则
我会对单独的ImageView
和FrameLayout
使用构造函数重写。然后在AsyncTask
方法内部使用Object
作为参数,在onPostExecute(Object result)
中只需检查if(ImageView的结果实例)
否则
谢谢!我想到了这个问题,但在onPostExecute()
中,我如何判断要为哪个视图(imageView或FrameLayout)添加图像?编辑了我的答案以回答该问题,但ivCover
始终是imageView的实例。flCover也是如此,因为我已经在AsyncTask中声明了这两个变量:`ImageView ivCover;框架布局和封面`我的意思是ivCover和flCover是声明的变量,不是我不知道的结果;我不知道它的类型。只需对结果
变量执行条件检查,而不是对类级变量执行条件检查!我想到了这个问题,但在onPostExecute()
中,我如何判断要为哪个视图(imageView或FrameLayout)添加图像?编辑了我的答案以回答该问题,但ivCover
始终是imageView的实例。flCover也是如此,因为我已经在AsyncTask中声明了这两个变量:`ImageView ivCover;框架布局和封面`我的意思是ivCover和flCover是声明的变量,不是我不知道的结果;我不知道它的类型。只需对结果
变量而不是类级变量执行条件检查即可