提问一道scjp的题。

「已注销」 2009-11-03 11:20:47
Question 175
Given:
1. import java.util.*;
2. public class Test {
3. public static void main(String[] args) {
4. List<String> strings = new ArrayList<String>();
5. // insert code here
6. }
7. }
Which four, inserted at line 5, will allow compilation to succeed?
(Choose four.)
A. String s = strings.get(0);
B. Iterator i1 = strings.iterator();
C. String[] array1 = strings.toArray();
D. Iterator<String> i2 = strings.iterator();
E. String[] array2 = strings.toArray(new String[1]);
F. Iterator<String> i3 = strings.iterator<String>();
Answer: ABDE
谁能详细的解释一下呢?
...全文
60 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2009-11-03
  • 打赏
  • 举报
回复
E. String[] array2 = strings.toArray(new String[1]);
为什么toArray(); 里加一个new String[1]就对了呢?
java_2008_4_4 2009-11-03
  • 打赏
  • 举报
回复
不选c是因为
strings.toArray(); 返回的是一个 Object[] 这里好像和泛型没有什么关系。
(且你并不能把一个 Object[] 强转成 String[],如果这样做了会报运行时异常。如果需要强转可以通过以下方式:
Object[] obA = strings.toArray();
for(Object ob : obA){
String tempS = (String)ob;
}
没时间细看 JDK 源码这里为什么不能强转。希望知情者告知~~
)
f 不对应该说是方法调用时的格式错了。也可以说方法调用并不存在泛型的使用。
Brodie 2009-11-03
  • 打赏
  • 举报
回复
加油,都做175道了。
泛型是1.5之后加的,所以要和之前的保持一致,没有泛型的要兼容有泛型的,但这样也有可能产生转换异常。
JackCF1 2009-11-03
  • 打赏
  • 举报
回复
F答案改成这样才行:Iterator <String> i3 = strings.iterator();
JackCF1 2009-11-03
  • 打赏
  • 举报
回复
不选C答案:没有引入泛型,默认的会返回一个Object类的数组,它又没有进行强制转换,所以错误!
F答案为何不选就不太清楚,请高手指点!

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧