问题:如果你有一个List并且它有String对象,那么在调用String方法之前,List的哪些声明不要求使用get方法检索的对象被强制转换为Strings? List <Object> a = new ArrayList <Object>();
I. List<Object> a = new ArrayList <Object>();
II. List<String> a = new ArrayList <String>();
III.List a = new ArrayList();
我真的不明白这个问题。我认为你必须强制转换为String以将其用作String,然后它必须是一个不会将String对象作为String返回的声明。
答案 0 :(得分:2)
以下是您应该如何思考答案:以下各项有何回报?
予。和III。是一回事。如果你打电话给get,两个实例都会返回java.lang.Object
。您必须将其强制转换为java.lang.String
才能使用它。
只有II。如果你调用get,将返回String
,因为泛型声明。
答案 1 :(得分:0)
2不需要显式转换。 1和3实际上是一回事。
答案 2 :(得分:0)
第二个。
ArrayList<String> a = new ArrayList <String>();
这意味着arraylist只能保存字符串类型变量。它在尖括号中表示字符串。这称为泛型,它允许您取出的数据采用您指定的形式,在本例中为String。
答案 3 :(得分:0)
予。和III都是对象列表(和I.在声明上有拼写错误,正确的类类型是“对象”)。你可以在它们中存储任何东西,包括字符串,但是只要编译器可以告诉它们......它们是Object类型,所以如果你想在你使用ArrayList.get检索的对象上调用String方法(.. 。)方法您必须将返回的对象强制转换为String。
II。是一个字符串列表(存储对象的类型由&lt; ...&gt;之间的泛型部分指定),编译器知道ArrayList只存储字符串,所以ArrayList.get()将直接返回一个String,无需演员。
您可以在Java Generics Tutorial中看到这个问题的一个例子。