Java泛型编程快速入门

模拟CMOS集成电路设计入门学习(1) 模拟CMOS集成电路设计入门学习(1):二级效应 阅读详情
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>  JDK1.5 令我们期待很久,可是当他发布的时候却更换版本号为5.0。这说明Java已经有大幅度的变化。本文将讲解JDK5.0支持的新功能-----Java的泛型.   1、Java泛型   其实Java的泛型就是创建一个用类型作为参数的类。就象我们写类的方法一样,方法是这样的method(String str1,String str2 ),方法中参数str1、str2的值是可变的。而泛型也是一样的,这样写class Java_Generics<K,V>,这里边的K和V就象方法中的参数str1和str2,也是可变。下面看看例子: //code list 1 import Java.util.Hashtable; class TestGen0<K,V>{  public Hashtable<K,V> h=new Hashtable<K,V>();  public void put(K k, V v) {   h.put(k,v);  }  public V get(K k) {   return h.get(k);  }  public static void main(String args[]){   TestGen0<String,String> t=new TestGen0<String,String>();   t.put("key", "value");   String s=t.get("key");   System.out.println(s);  } }   正确输出:value   这只是个例子(Java中集合框架都泛型化了,这里费了2遍事.),不过看看是不是创建一个用类型作为参数的类,参数是K,V,传入的“值”是String类型。这个类他没有特定的待处理型别,以前我们定义好了一个类,在输入输入参数有所固定,是什么型别的有要求,但是现在编写程序,完全可以不制定参数的类型,具体用的时候来确定,增加了程序的通用性,像是一个模板。   呵呵,类似C 的模板(类似)。   1.1. 泛型通配符   下面我们先看看这些程序: //Code list 2 void TestGen0Medthod1(List l) {  for (Object o : l)   System.out.println(o); }   看看这个方法有没有异议,这个方法会通过编译的,假如你传入String,就是这样List<String>。   接着我们调用它,问题就出现了,我们将一个List<String>当作List传给了方法,JVM会给我们一个警告,说这个破坏了类型安全,因为从List中返回的都是Object类型的,而让我们再看看下面的方法。 //Code list 3 void TestGen0Medthod1(List<String> l) {  for (Object o : l)   System.out.println(o); }   因为这里的List<String>不是List<Object>的子类,不是String与Object的关系,就是说List<String>不隶属于list<Object>,他们不是继承关系,所以是不行的,这里的extends是表示限制的。   类型通配符是很神奇的,List<?>这个你能为他做什么呢?怎么都是“?”,它似乎不确定,他总不能返回一个?作为类型的数据吧,是啊他是不会返回一个“?”来问程序员的?JVM会做简单的思考的,看看代码吧,更直观些。 //code list 4 List<String> l1 = new ArrayList<String>(); li.add(“String”); List<?> l2 = l1; System.out.println(l1.get(0));   这段代码没问题的,l1.get(0)将返回一个Object。   1.2. 编写泛型类要注意:   1) 在定义一个泛型类的时候,在 “<>”之间定义形式类型参数,例如:“class TestGen<K,V>”,其中“K” , “V”不代表值,而是表示类型。   2) 实例化泛型对象的时候,一定要在类名后面指定类型参数的值(类型),一共要有两次书写。例如: TestGen<String,String> t=new TestGen<String,String>();   3) 泛型中<K extends Object>,extends并不代表继承,它是类型范围限制。 2、泛型与数据类型转换   2.1. 消除类型转换   上面的例子大家看到什么了,数据类型转换的代码不见了。在以前我们经常要书写以下代码,如: //code list 5 import Java.util.Hashtable; class Test {  public static void main(String[] args) {   Hashtable h = new Hashtable();   h.put("key", "value");   String s = (String)h.get("key");   System.out.println(s);  } }   这个我们做了类型转换,是不是感觉很烦的,并且强制类型转换会带来潜在的危险,系统可能会抛一个ClassCastException异常信息。在JDK5.0中我们完全可以这么做,如: //code list 6 import Java.util.Hashtable; class Test {  public static void main(String[] args) {   Hashtable<String,Integer> h = new Hashtable<String,Integer> ();   h.put("key", new Integer(123));   int s = h.get("key").intValue();   System.out.println(s);  } }   这里我们使用泛化版本的HashMap,这样就不用我们来编写类型转换的代码了,类型转换的过程交给编译器来处理,是不是很方便,而且很安全。上面是String映射到String,也可以将Integer映射为String,只要写成HashTable<Integer,String> h=new HashTable<Integer,String>();h.get(new Integer(0))返回value。果然很方便。   2.2 自动解包装与自动包装的功能   从上面有没有看到有点别扭啊,h.get(new Integer(123))这里的new Integer(123);好烦的,在JDK5.0之前我们只能忍着了,现在这种问题已经解决了,请看下面这个方法。我们传入一个int这一基本型别,然后再将i的值直接添加到List中,其实List是不能储存基本型别的,List中应该存储对象,这里编译器将int包装成Integer,然后添加到List中去。接着我们用List.get(0);来检索数据,并返回对象再将对象解包装成int。恩,JDK5.0给我们带来更多方便与安全。 //Code list 7 public void autoBoxingUnboxing(int i) {  ArrayList<Integer> L= new ArrayList<Integer>();  L.add(i);  int a = L.get(0);  System.out.println("The value of i is " a); }   2.3 限制泛型中类型参数的范围   也许你已经发现在code list 1中的TestGen<K,V>这个泛型类,其中K,V可以是任意的型别。也许你有时候呢想限定一下K和V当然范围,怎么做呢?看看如下的代码: //Code list 8 class TestGen2<K extents String,V extends Number> {  private V v=null;  private K k=null;  public void setV(V v){   this.v=v;  }  public V getV(){   return this.v;  }  public void setK(K k){   this.k=k;  }  public V getK(){   return this.k;  }  public static void main(String[] args)  {   TestGen2<String,Integer> t2=new TestGen2<String,Integer>();   t2.setK(new String("String"));   t2.setV(new Integer(123));   System.out.println(t2.getK());   System.out.println(t2.getV());  } }   上边K的范围是<=String ,V的范围是<=Number,注意是“<=”,对于K可以是String的,V当然也可以是Number,也可以是Integer,Float,Double,Byte等。看看下图也许能直观些请看上图A是上图类中的基类,A1,A2分别是A的子类,A2有2个子类分别是A2_1,A2_2。   然后我们定义一个受限的泛型类class MyGen<E extends A2>,这个泛型的范围就是上图中兰色部分。   这个是单一的限制,你也可以对型别多重限制,如下: class C<T extends Comparable<? super T> & Serializable>   我们来分析以下这句,T extends Comparable这个是对上限的限制,Comparable< super T>这个是下限的限制,Serializable是第2个上限。一个指定的类型参数可以具有一个或多个上限。具有多重限制的类型参数可以用于访问它的每个限制的方法和域。   2.4. 多态方法 //Code list 9 class TestGen {  <T extends Object> public static List<T> make(T first) {   return new List<T>(first);  } }
数据科学助力大数据领域的航空安全分析 随着航空业的快速发展,航班数量不断增加,航空安全问题日益受到关注。大数据时代的到来,使得航空领域积累了大量的数据,包括飞行数据、维护数据、气象数据等。本文章的目的在于探讨如何运用数据科学的方法和技术,对这些大数据进行分析,以提高航空安全水平。范围涵盖了从数据收集、预处理到数据分析、模型构建和应用的整个流程。本文将按照以下结构进行组织:首先介绍数据科学和航空安全分析的核心概念以及它们之间的联系;接着阐述核心算法原理和具体操作步骤,并使用Python源代码进行详细说明; 阅读详情

相关推荐

别再手动算了!用Excel函数一键搞定AQI和首要污染物分析(附完整公式模板)

本文介绍如何利用Excel函数自动化计算AQI和首要污染物分析,大幅提升数据处理效率。通过构建标准化输入模板、智能计算IAQI、自动判定AQI与首要污染物,并生成可视化仪表盘,帮助环保工作者快速完成每日监测报告。

weixin_30443075的博客 346

Java泛型快速教程

泛型是Java SE 5.0引入的一种Java功能,在其发布几年后,我发誓那里的每个Java程序员不仅听说过它,而且已经使用过它。 关于Java泛型,有很多免费和商业资源,而我使用的最佳资源是: Java教程 Java泛型和集合 ,作者Maurice Naftalin和Philip Wadler 有效的Java(第二版) ,由Joshua Bloch撰写。 尽管有大量的...

最佳 Java 编程 434

K210开发板学习笔记(三)——STM32+K210+SD卡实现人脸识别(完整K210代码)

更新日记:2022年4月26日 更新了串口通信部分的内容,本文写的略为粗糙,恐有不当之处,希望大家不吝赐教。 人脸识别 一、MaixPy IDE开发 参考博主晨少hc的博文(https://blog.youkuaiyun.com/HuangChen666/article/details/113995079)来实现人脸识别功能,我用的硬件是亚博智能的K210开发板,在配置工程中有几步和这个博主的不一样,需要注意。 所需要的文件有:模型文件),脚本文件,ide需要的bin文件...

Embedded learner的博客 4万+

Java高级编程——泛型

Java高级编程——泛型

qq_61524266的博客 988

【冷冻电镜】RELION5.0使用教程总结

对于您自己的数据,您可能希望使用各种倾斜系列对齐方法,然后比较每种方法生成的断层扫描图像的质量(参见下一步)。通过检查 CtfFind job 的 tilt_series 目录中的star文件来检查几个倾斜系列的散焦值。GitHub上也有人反应这个问题,目前我的解决方案是下载了较低版本的CTFFIND的,降级到4.1.10可以成功运行。此外,logfile.pdf 文件包含所有显微照片的有用参数图,例如散焦、像散、估计分辨率等,以及整个数据集中这些值的直方图。的目录,以及指向此目录的符号链接。

进阶中的程序员吃吃的博客 4251

(一)利用Python实现数据集读取,Python基本文件操作介绍

机器学习是计算机对大量数据的分析过程,在机器学习的实际项目中,通常都需要准备数据集,数据集通常包含的数据数量是庞大的。例如,在处理计算机视觉领域的项目时,每一张图片都是一个单独的文件,为了提高模型训练的效果,图片数量通常会比较多,因此需要合理且高效的操作将所有的图片数据读取。本篇旨在介绍如何用Python对海量文件进行遍历,也是机器学习实践的第一步。.........

ZZR2631574030的博客 6357

Java中的泛型编程

引言 什么是泛型? 泛型的意思是 类型参数化。 到底什么是类型参数化呢?通过这一节内容,我们希望大家能够彻底弄懂什么是泛型,以及如何在开发中使用泛型。 Java泛型应用是java核心基础之一,从java5开始引入泛型概念。如果你曾经使用过java中的collection相关的类,那么就算你已经接触过泛型了。在java的Collection中使用泛型是一件很简单的事情,可泛型还具有许...

陈九龙的专栏 621

告别昂贵硬件!用Unity3D 2023 + ROS2 Humble搭建你的第一个SLAM仿真实验室(保姆级教程)

本文提供了一份详细的教程,介绍如何使用Unity3D 2023和ROS2 Humble搭建SLAM仿真实验室,无需昂贵硬件即可实现虚拟传感器模拟和算法测试。通过Docker容器配置、ROS2安装优化及Unity插件集成,开发者可以快速构建高精度的仿真环境,适用于自主导航、多传感器标定等场景。

weixin_42526353的博客 436

Java泛型编程

泛型是Java中的一种特性,它允许我们定义一种类型,在使用时再指定具体的类型。例如,我们可以定义一个 List 类型,然后在使用时指定具体的元素类型,例如 List<String>、List<Integer> 等。Java中的泛型是通过参数化类型来实现的,我们可以在定义类、接口、方法时,使用参数来表示类型变量,并在使用时指定具体的类型。在上述代码中,我们定义了一个 Box 类,它使用类型变量 T 表示要存储的值的类型。");

isuss的博客 406

保姆级教程:用Python+NumPy手把手模拟光学散射与记忆效应(附代码)

本文提供了一份详细的Python+NumPy教程,手把手教你模拟光学散射与记忆效应。从基础光波建模到散射介质实现,再到菲涅尔衍射和光学记忆效应验证,逐步构建完整的仿真系统。通过附带的代码示例,读者可以快速掌握计算光学仿真的核心技术,为医学成像、物理仿真等领域的研究提供实用工具。

weixin_30172941的博客 325

Oracle EBS订单的流程(Order->AR)

基本流程创建订单路径:Order Management > Orders,Returns > Sales Orders填写订单头信息,客户,订单类型,销售人员填写订单体信息,输入物料,数量...然后Book Order,订单Book之后,你会发现订单头的Status的状态变成了“Booked”,订单行的状态为"Awaiting Shipping",记录下来你的订单号,后边的每一步都需要这个订单号。

田攀的日志 4万+

JAVA基础:Java泛型编程快速入门

 JDK1.5 令我们期待很久,可是当他发布的时候却更换版本号为5.0。这说明Java已经有大幅度的变化。本文将讲解JDK5.0支持的新功能-----Java的泛型.  1、Java泛型  其实Java的泛型就是创建一个用类型作为参数的类。就象我们写类的方法一样,方法是这样的method(String str1,String str2 ),方法中参数str1、str2的值是可变的。而泛型也是一样的

sz_bdqn的专栏 659

【图像超分】论文复现:Pytorch实现SRCNN!保姆级复现教程!提供完整代码和最优权重模型(x2、x3、x4)!科研级论文曲线图!计算平均PSNR和SSIM!代码Windows和Linux都可用!

由于很多同学反应没用过jupyter notebook,更习惯用pycharm项目的形式跑代码。于是,本文将用pycharm项目的形式,重新复现SRCNN!【图像超分】论文复现:新手入门!Pytorch实现SRCNN,数据预处理、模型训练、测试、评估全流程详解,注释详细,简单修改就可以训练你自己的图像数据,有训练好的模型下载地址,随取随用。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 4705
上一篇: Sun提交Java模块系统规范 力求解决Java应用部署难题
下一篇: SQL Server数据库Java驱动jTDS发布1.1版本
java169
博客等级 码龄19年 27粉丝 2568原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值