Java 在安卓系统中,这段代码正在运行,有人能告诉我为什么和如何运行吗?

Java 在安卓系统中,这段代码正在运行,有人能告诉我为什么和如何运行吗?,java,android,list,android-recyclerview,android-arrayadapter,Java,Android,List,Android Recyclerview,Android Arrayadapter,在安卓系统中,我练习了循环视图,我注意到当我将字符串类型数组转换为整数类型列表时,它工作正常,当我将字符串类型列表转换为整数类型数组适配器时,它工作正常 String[] words = {"One","Two","Three","Four","Five","Six","Seven","Eight","Nine",&

在安卓系统中,我练习了循环视图,我注意到当我将字符串类型数组转换为整数类型列表时,它工作正常,当我将字符串类型列表转换为整数类型数组适配器时,它工作正常

 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);
String[]words={“一”、“二”、“三”、“四”、“五”、“六”、“七”、“八”、“九”、“十”};
listOfWords=newarraylist(Arrays.asList(words));
ArrayAdapter=newArrayAdapter(这是android.R.layout.simple\u list\u item\u 1,listOfWords);
ListView ListView=(ListView)findViewById(R.id.list);
setAdapter(适配器);

它实际上是关于Java而不是Android的。Java集合(例如ArrayList)使用隐藏的对象集合,当您定义
ArrayList
ArrayList
时,它们之间实际上没有区别。它们都在里面持有一个
对象[]
。所以实际上它们唯一的区别是编译器如何处理它们,如果我们使用像
get
这样的泛型函数,它将导致ClassCastException,因为您可以在它们的实现中找到未经检查的强制转换


ArrayAdapter也是以同样的方式定义的,实际上列表和ArrayAdapter不检查任何类型。换句话说,您愚弄了IDE、lint和编译器,因为这里没有类型检查,所以它可以毫无问题地工作(我不确定,但我认为在ArrayAdapter内部有一个代码,它为每个元素调用
toString
,或者检查它是否是字符串,或者是否使用
instanceof
)。此外,即使您使用
列表
,它仍然能够正常工作。

您使用的是原始类型(例如
新建ArrayList()
而不是
新建ArrayList
)。这些有效地破坏了泛型类型系统,因此不应该使用。但是这里没有泛型列表listOfWords@Joachim SauerYes,在这一点上,
已经是一个谎言:它确实包含字符串,但由于原始类型,编译器不会抱怨(除了使用原始类型:您确实收到了警告,不是吗?但您厚颜无耻地忽略了它)。使用泛型实例是一种良好的做法。您所说的“泛型实例”是什么意思?如果您是指
ArrayList
而不是
ArrayList
:是的,绝对是。使用原始类型(即没有
的类型)只允许与古代代码向后兼容,在使用时主动破坏类型系统并产生警告(您确实看到编译器警告,是吗?)。所有这些都在上面链接的问题/答案中解释。