Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 避免将null作为参数传递给构造函数_Java_Android - Fatal编程技术网

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是声明的变量,不是我不知道的结果;我不知道它的类型。只需对
结果
变量而不是类级变量执行条件检查即可