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