在 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> 它仍然可以正常运行。