在android中,这个代码正在运行,有人能告诉我为什么和如何运行吗?

hfwmuf9z  于 2021-07-12  发布在  Java
关注(0)|答案(1)|浏览(281)

这个问题在这里已经有答案了

什么是原始类型?为什么不使用它(15个答案)
两天前关门了。
在android中,我正在练习循环视图,我注意到当我将一个字符串类型数组转换成整数类型列表时,它工作正常,当我将字符串类型列表转换成整数类型数组时,它工作正常。

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

a11xaf1n1#

它实际上是关于java而不是android。java集合(例如arraylist)在定义 ArrayList<Integer> 和一个 ArrayList<String> 实际上他们之间没有区别。他们都持有 Object[] 在里面。所以实际上它们唯一的区别,就是编译器如何处理它们,如果我们使用像这样的泛型函数 get 这将导致classcastexception,因为您可以在它们的实现中找到未经检查的强制转换。
arrayadapter也是以同样的方式定义的,实际上list和arrayadapter并不检查任何类型。换句话说,你愚弄了ide、lint和编译器,因为这里没有类型检查,所以它可以毫无问题地工作(我不确定,但我认为在arrayadapter内部有一个调用 toString 或者检查它是否是字符串 instanceof ). 此外,即使你使用 List<Object> 它仍然可以正常工作。

相关问题