java学习(泛型编程generics)
来源:互联网 发布:奇葩秀视频直播间源码 编辑:程序博客网 时间:2024/05/16 10:54
以下代码实现了对三个不同类型的数组的打印
public class Generics { public static void main(String[] args){ Integer[] intArray = {1, 2, 3, 4, 5}; Double[] doubleArray = {1.1, 2.2, 3.3, 4.4, 5.5}; Character[] charArray = {'H', 'E', 'L', 'L', 'O'}; printArray(intArray); printArray(doubleArray); printArray(charArray); } public static <E> void printArray(E[] inputArray){ for(E element : inputArray){ System.out.printf("%s ",element); } System.out.println(); }}
说明
1. Integer与int的区别:Integer是一个类,int是基本数据类型,这是他们的根本区别。因此,如果需要往ArrayList或HashMap等里面放东西,必须使用Integer而不能用int。泛型也不支持int这种基本数据类型而必须用Integer类。double和Double,string和String,char和Character,float和Float类似
2. 泛型方法都有一个类型参数声明,该类型参数申明部分在返回值类型之前()
3. 若有多个类型参数,用逗号隔开
4. 类型参数也可以用来声明返回值类型
若想限制泛型类型参数的类型范围,直接在类型参数声明后面加extends+类或接口名,如下例
public class Generics{ public static <T extends Comparable<T>> T maximun(T x,T y,T z){ T max = x; if(y.compareTo(max) > 0){ max = y; } if(z.compareTo(max) > 0){ max = z; } return max; } public static void main(String[] args){ System.out.printf("%d,%d,%d中最大的是:%d",3,5,4,maximun(3, 5, 4)); System.out.println(); System.out.printf("%f,%f,%f中最大的是:%f",1.1,3.3,2.2,maximun(1.1, 3.3, 2.2)); System.out.println(); System.out.printf("%s,%s,%s中最大的是:%s","hello","world","java",maximun("hello", "world", "java")); System.out.println(); }}
该泛型类型参数只能接受实现了Comparable接口的类
泛型类
泛型类的申明和非泛型类的声明类似,区别仅在于泛型类在类名后添加了类型参数声明,若有多个类型参数,用逗号隔开
public class Generics{ public static void main(String[] args){ Box<Integer> integerBox = new Box<Integer>(); Box<String> stringBox = new Box<String>(); integerBox.set(new Integer(5)); System.out.println(integerBox.get()); stringBox.set(new String("hello")); System.out.println(stringBox.get()); }}class Box<T>{ private T t; public T get(){ return this.t; } public void set(T t){ this.t = t; }}
在new一个泛型类的实例的时候,需要给出特定的类初始化泛型类的类型参数
泛型通配符
public class Generics{ public static void main(String[] args){ List<String> name = new ArrayList<String>(); List<Integer> age = new ArrayList<Integer>(); List<Number> number = new ArrayList<Number>(); name.add("icon"); age.add(18); number.add(314); getData(name); getData(age); getData(number); //getNumber(name); getNumber(age); getNumber(number); } public static void getData(List<?> data){ System.out.println("data: " + data.get(0)); } public static void getNumber(List<? extends Number> data){ System.out.println("data: " + data.get(0)); }}
- 使用?代替具体的参数类型,比如上面的List
理解
public class Generics{ public static <T extends Comparable<T>> void mySort1(List<T> list){ Collections.sort(list); } public static <T extends Comparable<? super T>> void mySort2 (List<T> list){ Collections.sort(list); } public static void main(String[] args){ List<Animal> animals = new ArrayList<Animal>(); animals.add(new Animal(15)); animals.add(new Animal(30)); List<Dog> dogs = new ArrayList<Dog>(); dogs.add(new Dog(20)); dogs.add(new Dog(28)); mySort1(animals); mySort2(animals); //mySort1(dogs); mySort2(dogs); }}class Animal implements Comparable<Animal>{ protected int age; public Animal(int age){ this.age = age; } @Override public int compareTo(Animal o) { // TODO Auto-generated method stub return this.age - o.age; }}class Dog extends Animal{ public Dog(int age){ super(age); }}
上面这个程序,用sort1排序dogs时报错,而sort2排序时正确,说明sort2的T的条件更宽松,允许实现了该接口的类和它的子类使用。若子类想实现自己的Comparable接口,直接重写该接口的方法覆盖父类的该方法即可
参考: http://www.cnblogs.com/xiaomiganfan/p/5390252.html
0 0
- java学习(泛型编程generics)
- Generics Types 泛型学习笔记
- Generics Types 泛型学习笔记
- Generics Types 泛型学习笔记
- Generics Types 泛型学习笔记
- Generics Types 泛型学习笔记
- Java学习(1)-Java.Generics
- Java学习笔记(19)Generics
- The Java™ Tutorials — Generics :Why Use Generics? 为什么使用泛型
- The Java™ Tutorials — Generics :Restrictions on Generics 泛型约束
- 关于泛型Generics
- Java的范型(Generics)
- 对照Java学习Swift--泛型(Generics)
- Java Generics
- JAVA Generics
- Java基础学习——泛型(generics)学习一
- java学习脚印: 泛型(Generics)认识之三
- Java基础学习——泛型(generics)二
- bzoj4533 [BeiJing2014 WinterCamp] 数据
- 洛谷 P1307 数字反转
- CentOS7安装sublimeText3
- 画圆形图像
- c++设计模式之代理模式
- java学习(泛型编程generics)
- 一道积分不等式的证明
- 编程规范2
- [github高级控件] 带你走近 -> CircleIndicator指示器原点动画切换
- 《重构--改善既有代码的设计》总结三之重新组织函数
- java学习(properties)
- 10:变量作用域、指针
- Redis入门 Hello World
- 数据结构之查找总结