我最近完成了在AP计算机科学(Java)的在线课程,并在最后的考试中,是去是这样一个问题:的Java未定义泛型支架使用
Which of these needs a
String
cast to useString
methods on it:
I.ArrayList a = new ArrayList();
II.ArrayList<Object> b = new ArrayList<Object>();
III.ArrayList<String> c = new ArrayList<String>();
一下这让我感到困惑:可以选项I
甚至可以被铸造?它没有通用的定义,所以除非Java编译器拒绝ArrayList<Object>
,那么什么类的是E
呢?
这是(需要在抑制评论,因为这是一个“未登记”操作)我的测试代码:
ArrayList a = new ArrayList();
@SuppressWarnings("unchecked")
a.add(new Object());
@SuppressWarnings("unchecked")
a.add(new String("test"));
@SuppressWarnings("unchecked")
a.add(null);
System.out.println((String)(a.get(0)));
不管是在参数为add()
方法,它总是给编译器错误:
test.java:14: error: <identifier> expected
a.add(new Object());
^
如果我尝试添加该代码的任何地方的标识符(如:a<Object>.add(new Object())
),它会给出确切的同样的错误了。
问题是没有参数传递给泛型参数时实际发生的事情,并且可以首先将任何东西添加到此列表中,更不用说将其转换为另一个对象了?提前致谢!
“标识符预期”表示“语法错误”。我认为这与泛型没有任何关系。然而,我没有看到你的代码有任何问题。请仔细检查一下,我会在一秒之内启动IDE。 – markspace 2014-09-02 23:58:26
@markspace我再次检查它。我猜测它想要一个E类型的对象(或者至少是E的一个子类),但它没有找到它。 – portablesounds 2014-09-03 00:02:45