Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.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 Android:当我传递Null时,构造函数是不明确的,但当我传递分配给Null的变量时,构造函数不是不明确的_Java_Android_Arraylist_Adapter_Android Arrayadapter - Fatal编程技术网

Java Android:当我传递Null时,构造函数是不明确的,但当我传递分配给Null的变量时,构造函数不是不明确的

Java Android:当我传递Null时,构造函数是不明确的,但当我传递分配给Null的变量时,构造函数不是不明确的,java,android,arraylist,adapter,android-arrayadapter,Java,Android,Arraylist,Adapter,Android Arrayadapter,我编写了以下语句来创建一个ArrayAdapter 虽然我仍在传递null,但这不会给出错误,不是吗? 为什么会发生这种情况?之所以会发生这种情况,是因为在第二种情况下,arrayList是arrayList类型的变量,恰好为null。在第一种情况下,没有关于参数的类型信息,因此编译器不知道应该调用哪个方法。通过使用(List)null作为参数,可以使第一个案例生效。当您这样设置null时: ArrayAdapter(context, resource, textViewResourceId,

我编写了以下语句来创建一个
ArrayAdapter

虽然我仍在传递
null
,但这不会给出错误,不是吗?


为什么会发生这种情况?

之所以会发生这种情况,是因为在第二种情况下,arrayList是arrayList类型的变量,恰好为null。在第一种情况下,没有关于参数的类型信息,因此编译器不知道应该调用哪个方法。通过使用
(List)null
作为参数,可以使第一个案例生效。

当您这样设置null时:

ArrayAdapter(context, resource, textViewResourceId, null);
您正在设置一个空指针(指向空位置的指针),该空指针可以是任何对象

另一方面,当您执行此操作时:

ArrayList arrayList = null; 
ArrayAdapter arrayListAdapter = new ArrayAdapter(getActivity(), R.layout.fragment_result_titles, R.layout.row_listview, arrayList);

您正在内存中创建一个ArrayList类型指针(不指向任何对象,但指向类型为)。Java只能将对象分配给相同类型(或继承类型)的变量。所以,这一点还不含糊,编译器可以知道必须使用哪种方法。

要添加到Petter的答案中,以下内容也可以:

new ArrayAdapter<String>(getActivity(), R.layout.fragment_result_titles, R.layout.row_listview, (ArrayList)null);
newarrayadapter(getActivity(),R.layout.fragment\u result\u titles,R.layout.row\u listview,(ArrayList)null);

正是因为您提供了Java所需的类型信息,以解决使用哪个构造函数的歧义。

因为编译器解决了歧义,所以当您传递arrayList引用时。。。另外,如果在那里传递null,您将获得NPE(就在您将此适配器设置为AdapterView(ListView)之后),因为参考底图代码将尝试调用
((List)null).size()
)。。。您应该使用此构造函数:
ArrayAdapter(Context-Context,int-resource,int-textViewResourceId)
但内存不是仅在使用
new
操作符创建对象时分配的吗?执行此操作时是:ArrayList-array;你正在做一个指针,指向的不是任何东西,而是类型。执行以下操作时:array=new ArrayList(),即为新分配的对象分配内存和数组变量。但是自从创建指针后,类型就存在了。
ArrayList arrayList = null; 
ArrayAdapter arrayListAdapter = new ArrayAdapter(getActivity(), R.layout.fragment_result_titles, R.layout.row_listview, arrayList);
new ArrayAdapter<String>(getActivity(), R.layout.fragment_result_titles, R.layout.row_listview, (ArrayList)null);