在 android 这段代码有效 谁能告诉我为什么以及如何?
In android This code is working Can anyone tell me why and how?
在 Android 中,我正在练习 回收视图 并且我注意到当我 将字符串类型数组转换为整数类型列表时 它工作正常,当我将 字符串类型列表放入 Interger 类型 ArrayAdapter 时它工作正常。
String[] words = {"One","Two","Three","Four","Five","Six","Seven","Eight","Nine","Ten"};
List<Integer> listOfWords = new ArrayList(Arrays.asList(words));
ArrayAdapter<Integer> adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1,listOfWords);
ListView listView = (ListView) findViewById(R.id.list);
listView.setAdapter(adapter);
实际上是 Java 而不是 Android。 Java 集合(例如 ArrayList)在底层使用对象集合,当您定义 ArrayList<Integer>
和 ArrayList<String>
时,它们之间实际上没有区别。他们都在里面拿着一个Object[]
。所以实际上它们唯一的区别是编译器如何对待它们,如果我们使用像 get
这样的通用函数,它将导致 ClassCastException 因为你可以在它们的实现中找到一个未经检查的转换。
ArrayAdapter 也以相同的方式定义,实际上 Lists 和 ArrayAdapter 不检查任何类型。换句话说,你已经愚弄了 IDE、lint 和编译器,因为这里没有类型检查,它可以毫无问题地工作(我不确定,但我认为在 ArrayAdapter 中有一个代码调用 toString
为每个元素或检查它是否是一个字符串或不使用 instanceof
)。此外,即使您使用 List<Object>
它仍然可以正常运行。
在 Android 中,我正在练习 回收视图 并且我注意到当我 将字符串类型数组转换为整数类型列表时 它工作正常,当我将 字符串类型列表放入 Interger 类型 ArrayAdapter 时它工作正常。
String[] words = {"One","Two","Three","Four","Five","Six","Seven","Eight","Nine","Ten"};
List<Integer> listOfWords = new ArrayList(Arrays.asList(words));
ArrayAdapter<Integer> adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1,listOfWords);
ListView listView = (ListView) findViewById(R.id.list);
listView.setAdapter(adapter);
实际上是 Java 而不是 Android。 Java 集合(例如 ArrayList)在底层使用对象集合,当您定义 ArrayList<Integer>
和 ArrayList<String>
时,它们之间实际上没有区别。他们都在里面拿着一个Object[]
。所以实际上它们唯一的区别是编译器如何对待它们,如果我们使用像 get
这样的通用函数,它将导致 ClassCastException 因为你可以在它们的实现中找到一个未经检查的转换。
ArrayAdapter 也以相同的方式定义,实际上 Lists 和 ArrayAdapter 不检查任何类型。换句话说,你已经愚弄了 IDE、lint 和编译器,因为这里没有类型检查,它可以毫无问题地工作(我不确定,但我认为在 ArrayAdapter 中有一个代码调用 toString
为每个元素或检查它是否是一个字符串或不使用 instanceof
)。此外,即使您使用 List<Object>
它仍然可以正常运行。