Java中泛型的用法总结

 更新时间:2015年06月08日 14:51:38   作者:liuzx32  
这篇文章主要介绍了Java中泛型的用法,实例总结了java中泛型的常见使用技巧,需要的朋友可以参考下

本文实例总结了Java中泛型的用法。分享给大家供大家参考。具体如下:

1 基本使用

public interface List<E> {
 void add(E);
 Iterator<E> iterator();
}

2 泛型与子类

Child是Parent的子类,List<Child>却不是List<Parent>的子类。
因此:List<Object> list = new ArrayList<String>()是错误的。
如果上面是正确的,那么:

List<String> ls = new ArrayList<String>(); //1
List<Object> lo = ls; //2
lo.add(new Object()); // 3
String s = ls.get(0); // 4,将object转换为string将失败。

3 wildcards

因为2的原因,下面的实现用于统配集合的输出是不行的

void printCollection(Collection<Object> c) {
 for (Object o: c) {
 // do something
 }
}

因此,需要通配符?:

void printCollection(Collection<?> c) {
 for (Object o: c) { // 1
 // do something
 }
} // ok

此处的?表示类型未知,但是任何对象均是Object,因此上例的1是正确的。但下例却是错误的:

void add(Collection<? extends MyClass> c) {
 c.add(new MyClass()); // wrong
} // ok

原因也很明确,? extends MyClass说明类型是MyClass的子类,但是却并不知道具体类型

4. 泛型方法

上例可以实现为:

<T> add(Collection<T> c, T t) {
 c.add(t);
}

编译器在保证语义的前提,会帮忙做类型的转换工作。

5. 泛型运行时的对比

List<String> l1 = new ArrayList<String>();
List<Integer> l2 = new ArrayList<Integer>();
System.out.println(l1.getClass() == l2.getClass()); // true

因为泛型类运行时时一样的。

6 泛型数组(可能导致类型不安全)

复制代码 代码如下:
List<String>[] lsa = new ArrayList<String>[10]; // error

如果可以的话,可能导致类型不安全。如:

Object o = lsa;
Object []oa = (Object[])o;
List<Integer> li = new ArrayList<Integer>();
li.add(new Integer(3));
oa[1] = li;
String s = lsa[1].get(0); // runtime error

希望本文所述对大家的java程序设计有所帮助。

相关文章

  • Java实现读取超过内存大小的文件

    Java实现读取超过内存大小的文件

    在一些场景下,我们需要处理的文件可能比我们机器所拥有的内存要大,如果遇到这种情况该如何解决呢,本文就来和大家讲讲如何使用Java实现读取超过内存大小的文件吧
    2024-03-03
  • SpringMVC文件上传中要解决的问题大汇总

    SpringMVC文件上传中要解决的问题大汇总

    这篇文章主要介绍了SpringMVC文件上传中要解决的问题,主要有中文文件名编码问题,文件位置存储问题以及文件名冲突问题等等,本文结合实例代码给大家介绍的非常详细,需要的朋友可以参考下
    2023-01-01
  • springboot实现mock平台的示例代码

    springboot实现mock平台的示例代码

    本文主要介绍了springboot实现mock平台的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • Springmvc数据回显实现原理实例解析

    Springmvc数据回显实现原理实例解析

    这篇文章主要介绍了Springmvc数据回显实现原理实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09
  • 如何解决SpringBoot2.6及之后版本取消了循环依赖的支持问题

    如何解决SpringBoot2.6及之后版本取消了循环依赖的支持问题

    循环依赖指的是两个或者多个bean之间相互依赖,形成一个闭环,SpringBoot从2.6.0开始默认不允许出现Bean循环引用,解决方案包括在全局配置文件设置允许循环引用存在、在SpringApplicationBuilder添加设置允许循环引用、构造器注入
    2024-10-10
  • SpringBoot3实现国际化的代码步骤

    SpringBoot3实现国际化的代码步骤

    国际化,简称 i18n,源自国际化英文单词 internationalization 中首字母 i 与尾字母 n 之间有 18 个字母,本文给大家介绍了SpringBoot3实现国际化的操作步骤,并通过代码示例讲解的非常详细,需要的朋友可以参考下
    2024-12-12
  • 如何使用IntelliJ IDEA中的Live Templates自定义代码模板

    如何使用IntelliJ IDEA中的Live Templates自定义代码模板

    在IntelliJ IDEA中,通过使用LiveTemplates功能,可以实现快速编码和自定义代码模板,例如,输入“main”可以自动补全主函数结构,“sout”可以补全输出语句,用户可以通过设置中的LiveTemplates选项查看和定义快捷模板,支持使用分组管理和参数化模板内容,适应复杂的编码需求
    2024-11-11
  • java虚拟机中多线程总结

    java虚拟机中多线程总结

    在本篇内容中小编给大家分享的是关于java虚拟机中多线程的知识点总结内容,需要的朋友们参考学习下。
    2019-06-06
  • java.util.Collections类—emptyList()方法的使用

    java.util.Collections类—emptyList()方法的使用

    这篇文章主要介绍了java.util.Collections类—emptyList()方法的使用,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • idea创建springboot项目,java版本只能选择17和21的解决方案

    idea创建springboot项目,java版本只能选择17和21的解决方案

    这篇文章主要介绍了idea创建springboot项目,java版本只能选择17和21的解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-04-04

最新评论