10道Java泛型的面试题(2)

时间:2020-11-12 09:32:14 面试问题 我要投稿

10道关于Java泛型的面试题

List<String> rawList = new ArrayList()

注意: Hello.java使用了未检查或称为不安全的操作;

这种警告可以使用@SuppressWarnings(“unchecked”)注解来屏蔽。

Java泛型面试题补充更新:

我手头又拿到了几个Java泛型面试题跟大家分享下,这几道题集中在泛型类型和原始类型的区别上,以及我们是否可以用Object来代替限定通配符的使用等等:

Java中List<Object>和原始类型List之间的区别?

原始类型和带参数类型<Object>之间的.主要区别是,在编译时编译器不会对原始类型进行类型安全检查,却会对带参数的类型进行检 查,通过使用Object作为类型,可以告知编译器该方法可以接受任何类型的对象,比如String或Integer。这道题的考察点在于对泛型中原始类 型的正确理解。它们之间的第二点区别是,你可以把任何带参数的类型传递给原始类型List,但却不能把List<String>传递给接受 List<Object>的方法,因为会产生编译错误。更多详细信息请参阅Java中的泛型是如何工作的。

Java中List<?>和List<Object>之间的区别是什么?

这道题跟上一道题看起来很像,实质上却完全不同。List<?> 是一个未知类型的List,而List<Object> 其实是任意类型的List。你可以把List<String>, List<Integer>赋值给List<?>,却不能把List<String>赋值给 List<Object>。     

List<?> listOfAnyType;

List<Object> listOfObject = new ArrayList<Object>();

List<String> listOfString = new ArrayList<String>();

List<Integer> listOfInteger = new ArrayList<Integer>();

listOfAnyType = listOfString; //legal

listOfAnyType = listOfInteger; //legal

listOfObjectType = (List<Object>) listOfString; //compiler error – in-convertible types

想了解更多关于通配符的信息请查看Java中的泛型通配符示例

List<String>和原始类型List之间的区别.

该题类似于“原始类型和带参数类型之间有什么区别”。带参数类型是类型安全的,而且其类型安全是由编译器保证的,但原始类型List却不是类型安全 的。你不能把String之外的任何其它类型的Object存入String类型的List中,而你可以把任何类型的对象存入原始List中。使用泛型的 带参数类型你不需要进行类型转换,但是对于原始类型,你则需要进行显式的类型转换。

List listOfRawTypes = new ArrayList();

listOfRawTypes.add(“abc”);

listOfRawTypes.add(123); //编译器允许这样 – 运行时却会出现异常

String item = (String) listOfRawTypes.get(0); //需要显式的类型转换

item = (String) listOfRawTypes.get(1); //抛ClassCastException,因为Integer不能被转换为String

List<String> listOfString = new ArrayList();

listOfString.add(“abcd”);

listOfString.add(1234); //编译错误,比在运行时抛异常要好

item = listOfString.get(0); //不需要显式的类型转换 – 编译器自动转换

这些都是Java泛型面试中 频繁出现的问题及其答案。所有这些面试题都不困难,其实它们都是基于泛型的基础知识。任何对泛型有不错了解的Java程序员都肯定熟知这些泛型题目。如果 你有任何好的面试题,不管是在什么面试中碰到的,或者如果你想知道任何Java泛型面试题的答案。

【10道关于Java泛型的面试题】相关文章:

关于Java入门的字符型数据10-08

关于Java面试题及答案08-12

微软10道笔试面试题目08-19

经典的Java基础面试题08-22

精选Java线程面试题06-15

java基础面试题201711-13

华为Java面试题精选10-24

高级Java面试题汇总09-12

2016年JAVA面试题11-07

关于Java程序员面试题集08-11