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);