首页 > 编程语言 >JAVA

JAVA

时间:2023-10-22 18:33:30浏览次数:35  
标签:Java 限定 通配符 List 类型 泛型 JAVA

1.Java中的泛型是什么 ? 使用泛型的好处是什么?

这是在各种Java泛型面试中,一开场你就会被问到的问题中的一个,主要集中在初级和中级面试中。那些拥有Java1.4或更早版本的开发背景的人都知道,在集合中存储对象并在使用前进行类型转换是多么的不方便。

泛型防止了那种情况的发生。它提供了编译期的类型安全,确保你只能把正确类型的对象放入集合中,避免了在运行时出现ClassCastException。

  

2. Java的泛型是如何工作的 ? 什么是类型擦除 ?

 

这是一道更好的泛型面试题。泛型是通过类型擦除来实现的,编译器在编译时擦除了所有类型相关的信息,所以在运行时不存在任何类型相关的信息。例如List在运行时仅用一个List来表示。这样做的目的,是确保能和Java 5之前的版本开发二进制类库进行兼容。

你无法在运行时访问到类型参数,因为编译器已经把泛型类型转换成了原始类型。根据你对这个泛型问题的回答情况,你会得到一些后续提问,比如为什么泛型是由类型擦除来实现的或者给你展示一些会导致编译器出错的错误泛型代码。更多请参考这篇文章《揭开Java 泛型类型擦除神秘面纱》。

3. 什么是泛型中的限定通配符和非限定通配符 ?

这是另一个非常流行的Java泛型面试题。限定通配符对类型进行了限制。有两种限定通配符,一种是它通过确保类型必须是T的子类来设定类型的上界,另一种是它通过确保类型必须是T的父类来设定类型的下界。泛型类型必须用限定内的类型来进行初始化,否则会导致编译错误。另一方面表示了非限定通配符,因为<?>可以用任意类型来替代。

  

4. List<? extends T>和List <? super T>之间有什么区别 ?

这和上一个面试题有联系,有时面试官会用这个问题来评估你对泛型的理解,而不是直接问你什么是限定通配符和非限定通配符。这两个List的声明都是限定通配符的例子,List<? extends T>可以接受任何继承自T的类型的List,而List<? super T>可以接受任何T的父类构成的List。例如List<? extends Number>可以接受List或List。在本段出现的连接中可以找到更多信息。

5. 如何编写一个泛型方法,让它能接受泛型参数并返回泛型类型?

编写泛型方法并不困难,你需要用泛型类型来替代原始类型,比如使用T, E or K,V等被广泛认可的类型占位符。泛型方法的例子请参阅Java集合类框架。最简单的情况下,一个泛型方法可能会像这样:

  typescript 复制代码
public V put(K key, V value) {

 return cache.put(key, value);

}   

6. Java中如何使用泛型编写带有参数的类?

这是上一道面试题的延伸。面试官可能会要求你用泛型编写一个类型安全的类,而不是编写一个泛型方法。关键仍然是使用泛型类型来代替原始类型,而且要使用JDK中采用的标准占位符。

7. 编写一段泛型程序来实现LRU缓存?

对于喜欢Java编程的人来说这相当于是一次练习。给你个提示,LinkedHashMap可以用来实现固定大小的LRU缓存,当LRU缓存已经满了的时候,它会把最老的键值对移出缓存。

LinkedHashMap提供了一个称为removeEldestEntry()的方法,该方法会被put()和putAll()调用来删除最老的键值对。当然,如果你已经编写了一个可运行的JUnit测试,你也可以随意编写你自己的实现代码。

8. 你可以把List传递给一个接受List参数的方法吗?

 

对任何一个不太熟悉泛型的人来说,这个Java泛型题目看起来令人疑惑,因为乍看起来String是一种Object,所以List应当可以用在需要List的地方,但是事实并非如此。真这样做的话会导致编译错误。

 

如果你再深一步考虑,你会发现Java这样做是有意义的,因为List可以存储任何类型的对象包括String, Integer等等,而List却只能用来存储Strings。 

 

  ini 复制代码
List<Object> objectList;
List<String> stringList;
objectList = stringList;

 

9. Array中可以用泛型吗?

这可能是Java泛型面试题中最简单的一个了,当然前提是你要知道Array事实上并不支持泛型,这也是为什么Joshua Bloch在Effective Java一书中建议使用List来代替Array,因为List可以提供编译期的类型安全保证,而Array却不能。

10. 如何阻止Java中的类型未检查的警告?

如果你把泛型和原始类型混合起来使用,例如下列代码,Java 5的javac编译器会产生类型未检查的警告,例如  

 

  ini 复制代码
List<String> rawList = new ArrayList();

作者:用户6928304583721
链接:https://juejin.cn/post/7291479799520018487
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

标签:Java,限定,通配符,List,类型,泛型,JAVA
From: https://www.cnblogs.com/aoshine/p/17780808.html

相关文章

  • Java基础 字节输出流 写出数据的三种方式
    void write(int b)  →  一次写一个字节数据 void write(byte[] b)  →  一次写一个字节数组数据 void write(byte[] b, int off, int len)  →  一次写一个字节数组的部分数据参数一:装着所有数据的数组。参数二:起始索引。参数......
  • Java基础 字节输出流写出数据的细节
    1.创建字节输出流对象:FileOutputStreamfos=newFileOutputStream("E:\\Java基础资料\\a.txt");细节①:参数可以是字符串表示的路径,也可以是File对象细节②:如果文件不存在,会创建一个新的空文件,但是要保证父级路径是存在的细节③:如果文件已经存在,则会清空文件 2.写数据:f......
  • Java基础 IO流的体系 和 字节输出流基本语法
     FileOutputStream:操作本地文件的字节输出流,可以把程序中的数据写到本地文件中 步骤:1.创建字节输出流对象2.写数据3.释放资源 eg:publicstaticvoidmain(String[]args)throwsIOException{FileOutputStreamfos=newFileOutputStream("E:\\Java基础资料......
  • Java基础 IO 流
    IO流:存储和和读取数据的解决方案IO流用于读写文件中的数据(可以读写文件,或网络中的数据...)IO流可以把程序中的数据保存到本地文件当中,也叫写出数据(output),还可以把本地文件中的数据加载到程序当中,也叫读取数据(input) 问:IO流中,谁在读,谁在写?以谁为参照物看读写的方向呢?答:以......
  • 巧用枚举解决业务场景的 Switch 语句—Java 实践
    巧用枚举解决业务场景的Switch语句——Java实践Switch语句是一种常见的流程控制语句,用于根据不同的条件执行不同的代码块。然而,当业务场景变得复杂时,使用大量的Switch语句可能导致代码冗长、难以维护和扩展。本文将介绍如何巧妙地使用枚举类型来优化和简化Switch语句的使......
  • java 日志框架
    日志框架:什么是日志框架? a.是一套能实现日志输出的工具包. b.能够记录系统运行状态的所有时间的日志.场景: 用户下线、接口超时、数据库崩溃、HelloWorld日志框架的能力:定制输出目标: 并不只是输出到控制台,如文件、数据库、第三方日志服务.运行时选择性输出: ......
  • How to use regular expression to match a special meta tag in html string using j
    HowtouseregularexpressiontomatchaspecialmetataginhtmlstringusingjavascriptAllInOnemetatagerror❌consthtml=`<!DOCTYPEhtml><htmllang="en"><head><metaname="twitter:card"content......
  • Java基础 小练习——统计各种文件的数量
    publicstaticvoidmain(String[]args){Filef=newFile("E:\\Java基础资料\\哈哈");HashMap<String,Integer>count=getCount(f);StringBuildersb=newStringBuilder();for(Map.Entry<String,Integer>entry:count.entry......
  • 基于java(ssm)交通事故档案管理系统
    (文章目录)具体实现截图主要功能:基于java(ssm)交通事故档案管理系统系统分为用户和管理员两个角色用户的主要功能有:1.用户注册和登陆系统2.用户查看警察相关信息3.用户查看我的相关事故信息,可以对交通事故进行交通申诉4.用户查看交通申诉审核信息5.退出登陆管理员的主......
  • Java基础概念
    JVM(JavaVirtualMachine)java跨平台原理:总结:在需要运行Java应用程序的操作系统上,安装一个与操作系统对应的Java虚拟机(JavaVirtualMachine)即可。JRE(JavaRuntimeEnvironment)是Java程序的运行时环境,包含JVM和运行时所需要的核心类库。我们想要运行一个已有的Java程......