java 泛型的详解及实例

发布时间 - 2026-01-11 03:01:06    点击率:

java 泛型的详解及实例

Java在1.5版本中增加了泛型,在没有泛型之前,从集合中读取每一个对象都需要进行强转,如果一不小心插入了类型错误的对象,在运行时就会报错,给日常开发带来了很多不必要的麻烦,比如以下代码:

public class TestGeneric
{
  public static void main(String[] args) {
    List list = new ArrayList();
    list.add(" name:");
    list.add(" zero,");
    list.add(" age:");
    list.add(24);
    list.add(false);
    for (Object object : list)
    {
      String test = (String) object;
      System.out.print(test);
    }
  }
}
name:zero,age:Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
  at com.zm.zero.test.TestGeneric.main(TestGeneric.java:18)

经过运行,立马脾气来了,小样,来本事啦!

List和List< Object>有什么区别,不严格的说,前者逃避了泛型检查,后者告诉编译器,持有一个Object类型的对象,属于编译器的一种优化,在编译的时候不通过来增加类型的安全性。如果上述代码使用的是泛型,便可以避免这类事故的发生,在Java的编程思想中,一直在提倡“出错之后尽快发现”,那么编译时发现报错肯定优先于运行时的报错,此处做了一个简单的修改:

此处仅仅是把List改成了List< String>去检查add时候值的类型,如果add时候值的类型是非法的,编译时便会报错。

对于创建泛型对象,几乎每个开发者都会使用过,比如最初学的Class.forName()返回的对象就是Class< T>,对于泛型方法,会有部分开发者显得有点摸不着头脑,好吧,啥废话都不说了,就是干,先代码再上图:

public class JsonToModel
{

  /**
   * 
   * @param msg
   * @param t
   *      model类
   * @return
   */
  public static <T extends BaseModel<T>> T getJsonToModel(Message msg, Class<T> t) {
    // TODO Auto-generated method stub
    try
    {
      JsonObject jsonObject = new JsonParser().parse(msg.obj.toString())
          .getAsJsonObject().getAsJsonObject("info");
      return GsonHelper.toType(jsonObject.toString(), t);
    } catch (Exception e)
    {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
    return null;
  }
}

除了T以外,常见的还有以下几种:

  • E - Element (在集合中使用,因为集合中存放的是元素)
  • K - Key(键)
  • V - Value(值)
  • N - Number(数值类型)
  • ? - 表示不确定的java类型

日常开发中什么时候用到泛型?那就多了,比如解析json的时候,正常情况下,后台返回的json基本格式都是相同的,但是里面字段各有不同,通过泛型传入不同的model,大大的提高了代码的可重用性和可维护性,为了以后的开发省去太多不必要的麻烦。

以上就是java泛型的使用方法总结,如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


# java  # 泛型  # 泛型的使用方法  # 泛型实例详解  # 实例分析Java泛型  # 重新理解Java泛型  # Java 基础详解(泛型、集合、IO、反射)  # 详谈Java泛型中T和问号(通配符)的区别  # Java编程探索之泛型擦除实例解析  # Java编程泛型限定代码分享  # Java 中利用泛型和反射机制抽象DAO的实例  # 通过代码理解java泛型  # 报错  # 的是  # 都是  # 来了  # 会有  # 都不  # 太多  # 的说  # 说了  # 如有  # 什么时候  # 这类  # 希望能  # 带来了  # 摸不着头脑  # 便可  # 仅仅是  # 好吧  # 几种  # 各有 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel中的withCount方法怎么高效统计关联模型数量  Win11怎么关闭专注助手 Win11关闭免打扰模式设置【操作】  Android 常见的图片加载框架详细介绍  UC浏览器如何切换小说阅读源_UC浏览器阅读源切换【方法】  大连 网站制作,大连天途有线官网?  青岛网站建设如何选择本地服务器?  如何确保FTP站点访问权限与数据传输安全?  Laravel如何使用Sanctum进行API认证?(SPA实战)  如何用5美元大硬盘VPS安全高效搭建个人网站?  中国移动官方网站首页入口 中国移动官网网页登录  Python文件流缓冲机制_IO性能解析【教程】  深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?  如何在云主机上快速搭建网站?  新三国志曹操传主线渭水交兵攻略  大同网页,大同瑞慈医院官网?  如何在建站之星绑定自定义域名?  Win11怎样安装网易有道词典_Win11安装词典教程【步骤】  网站制作软件有哪些,制图软件有哪些?  如何用景安虚拟主机手机版绑定域名建站?  JS中页面与页面之间超链接跳转中文乱码问题的解决办法  悟空识字如何进行跟读录音_悟空识字开启麦克风权限与录音  深圳防火门网站制作公司,深圳中天明防火门怎么编码?  Laravel如何优雅地处理服务层_在Laravel中使用Service层和Repository层  java中使用zxing批量生成二维码立牌  高端智能建站公司优选:品牌定制与SEO优化一站式服务  高端网站建设与定制开发一站式解决方案 中企动力  Laravel如何清理系统缓存命令_Laravel清除路由配置及视图缓存的方法【总结】  邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?  西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?  Laravel如何使用模型观察者?(Observer代码示例)  5种Android数据存储方式汇总  高防服务器租用首荐平台,企业级优惠套餐快速部署  香港服务器租用每月最低只需15元?  大学网站设计制作软件有哪些,如何将网站制作成自己app?  百度浏览器网页无法复制文字怎么办 百度浏览器复制修复  ChatGPT 4.0官网入口地址 ChatGPT在线体验官网  JavaScript Ajax实现异步通信  nginx修改上传文件大小限制的方法  Laravel如何设置自定义的日志文件名_Laravel根据日期或用户ID生成动态日志【技巧】  高配服务器限时抢购:企业级配置与回收服务一站式优惠方案  详解CentOS6.5 安装 MySQL5.1.71的方法  为什么php本地部署后css不生效_静态资源加载失败修复技巧【技巧】  Laravel如何发送系统通知_Laravel Notifications实现多渠道消息通知  免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?  Laravel的契約(Contracts)是什么_深入理解Laravel Contracts与依赖倒置  标题:Vue + Vuex + JWT 身份认证的正确实践与常见误区解析  通义万相免费版怎么用_通义万相免费版使用方法详细指南【教程】  黑客如何通过漏洞一步步攻陷网站服务器?  Laravel如何优化应用性能?(缓存和优化命令)  如何为不同团队 ID 动态生成多个非值班状态按钮