java泛型总结(一)
2016-05-14 17:51
441 查看
泛型方法
泛型可以在普通类中定义,也可以在泛型类中定义
类型变量的限定
类或方法需要对类型变量加以约束
smallest类型为T,意味着它可以使任何一个类的对象
—–可以将T限制为实现了Comparable接口
—–public static T min(T[] a)…—–(没错,就是extends,不是implements,因为extends更接近子类的概念)
表示的含义是返回值的类型必须是Comparable的子类
—–也可以用T extends Comparable & Serializable //一个类型变量或通配符可以有多个限定,用&分隔
—–借用java核心技术中的例子
class Arraylg { public static <T> T getMiddle(T...a) { return a[a.length / 2]; } }
泛型可以在普通类中定义,也可以在泛型类中定义
String middle = Arraylg.<String>getMiddle("a","b","c");
类型变量的限定
类或方法需要对类型变量加以约束
class Arraylg { public static <T> T min(T[] a) { if (a == null || a.length == 0) { return null; } T smallest = a[0]; for (int i=1;i<a.length;i++) { if (smallest.compareTo(a[i] > 0)) smallest = a[i]; } return smallest; } }
smallest类型为T,意味着它可以使任何一个类的对象
—–可以将T限制为实现了Comparable接口
—–public static T min(T[] a)…—–(没错,就是extends,不是implements,因为extends更接近子类的概念)
表示的含义是返回值的类型必须是Comparable的子类
—–也可以用T extends Comparable & Serializable //一个类型变量或通配符可以有多个限定,用&分隔
—–借用java核心技术中的例子
public class pairTest { public static void main(String[] args) { GregorianCalendar birthdays = { new GregorianCalendar(1906 , Calendar.DECEMBER , 9), new GregorianCalendar(1815 , Calendar.DECEMBER , 10), new GregorianCalendar(1903 , Calendar.DECEMBER , 3), new GregorianCalendar(1910 , Calendar.DECEMBER , 2), }; Pair<GregorianCalendar> mm = ArrayAlg.minmax(birthdays); System.out.println("min = " + mm.getFirst().getTime()); System.out.println("max = " + mm.getSecond().getTime()); } } class ArrayAlg { public static <T extends Comparable> Pair<T> minmax(T[] a) { if (a == null || a.length == 0) return null; T min = a[0]; T max = a[0]; for (int i=1;i<a.length;i++) { if (min.compareTo(a[i]>0)) min = a[i]; if (max.compareTo(a[i]<0)) max = a[i]; } return new Pair<>(min , max); } } class Pair<T> { private T first; private T second; public Pair() { first = null; second = null; } public Pair(T first , T second) { this.first = first ; this.second = second; } public T getFirst() { return first; } public T getSecond { return second; } public void setFirst(T newValue) { first = newValue; } public void setSecond(T newValue) { second = newValue; } }
相关文章推荐
- 基于Spring4.x 搭建 Spring MVC + MyBatis
- 一天一个Java基础——通过异常处理错误
- 【J2SE】java的流概念
- 开源jxls - java导Excel(多sheet) - 模板文件定义类似jsp的el表达式
- JAVA之旅(三)——数组,堆栈内存结构,静态初始化,遍历,最值,选择/冒泡排序,二维数组,面向对象思想
- JAVA之旅(三)——数组,堆栈内存结构,静态初始化,遍历,最值,选择/冒泡排序,二维数组,面向对象思想
- Java Serializable(序列化)实例 第二部分
- Spring源码解读--init属性和预实例化(延迟加载)
- java使用jxls导出excel功能
- spring IOC容器:控制反转
- Spring Mvc那点事---(4)Spring Mvc控制器Controller
- Java中值传递与引用传递
- 69道Spring面试题和答案
- java设计模式-观察者模式学习
- java入门之中文输出问题
- java 实现N个女人过桥问题
- JDK API文档下载
- java中Comparator的用法
- spring factory-method
- MyEclipse8.5破解方法