从头认识java-13.3 泛型接口的使用
来源:互联网 发布:淘宝上冰毒暗语 编辑:程序博客网 时间:2024/06/14 10:45
这一章节我们来讨论一下泛型接口的使用。
我们以生成器为例子(generator),生成器是工厂方法的一种运用,主要用来创建对象,一般使用工厂方法都是需要输入参数以便取得不同的对象,但是生成器是生成一系列的对象。
代码:
package com.ray.ch13;import java.util.Iterator;import java.util.Random;public class Test implements Generator<Father> {private Class<?>[] classes = { Sub1.class, Sub2.class, Sub3.class };private Random random = new Random();@Overridepublic Father next() {Father father = null;try {father = (Father) classes[random.nextInt(3)].newInstance();} catch (InstantiationException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();}return father;}public static void main(String[] args) {Test test = new Test();for (int i = 0; i < 5; i++) {System.out.println(test.next());}}}interface Generator<T> {T next();}class Father {private static int counter = 0;private final int id = counter++;@Overridepublic String toString() {return "name:" + getClass().getSimpleName() + " id:" + id;}}class Sub1 extends Father {}class Sub2 extends Father {}class Sub3 extends Father {}
输出:
name:Sub3 id:0
name:Sub1 id:1
name:Sub3 id:2
name:Sub3 id:3
name:Sub3 id:4
上面的代码通过生成器生成了5个Father 的自对象Sub,在创建的过程中,生成器不需要输入参数,直接是生成一些列Father的子类对象。
我们修改一下上面的代码,使它满足foreach的使用(就是实现Iterable接口):
package com.ray.ch13;import java.util.Iterator;import java.util.Random;public class Test implements Generator<Father>, Iterable<Father> {public Test() {}private int size = 0;public Test(int size) {this.size = size;}private Class<?>[] classes = { Sub1.class, Sub2.class, Sub3.class };private Random random = new Random();@Overridepublic Father next() {Father father = null;try {father = (Father) classes[random.nextInt(3)].newInstance();} catch (InstantiationException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();}return father;}public static void main(String[] args) {Test test = new Test();for (int i = 0; i < 5; i++) {System.out.println(test.next());}System.out.println("------------------");for (Father father : new Test(5)) {System.out.println(father);}}@Overridepublic Iterator<Father> iterator() {return new FatherIterator();}class FatherIterator implements Iterator<Father> {private int count = size;@Overridepublic boolean hasNext() {return count > 0;}@Overridepublic Father next() {count--;return Test.this.next();}@Overridepublic void remove() {throw new UnsupportedOperationException();}}}interface Generator<T> {T next();}class Father {private static int counter = 0;private final int id = counter++;@Overridepublic String toString() {return "name:" + getClass().getSimpleName() + " id:" + id;}}class Sub1 extends Father {}class Sub2 extends Father {}class Sub3 extends Father {}
输出:
name:Sub3 id:0
name:Sub1 id:1
name:Sub3 id:2
name:Sub3 id:3
name:Sub3 id:4
------------------
name:Sub3 id:5
name:Sub1 id:6
name:Sub1 id:7
name:Sub2 id:8
name:Sub3 id:9
参数化的接口确保next()的返回类型。
我们下面再看另一个例子,是著名的数学题目斐波那契数列:
package com.ray.ch13;public class Test implements Generator<Integer> {private Integer count = 0;@Overridepublic Integer next() {return fib(count++);}private Integer fib(int param) {if (param < 2) {return 1;}return fib(param - 2) + fib(param - 1);}public static void main(String[] args) {Test test = new Test();for (int i = 0; i < 10; i++) {System.out.print(test.next() + " ");}}}interface Generator<T> {T next();}
输出:
1 1 2 3 5 8 13 21 34 55
总结:这一章节主要展示了泛型接口的使用。
这一章节就到这里,谢谢。
-----------------------------------
目录
4 0
- 从头认识java-13.3 泛型接口的使用
- 从头认识java-13.4 泛型方法的使用
- 从头认识java-7.2 接口
- 从头认识java-13.7 什么时候使用泛型?
- 从头认识java-8.10 接口里面的类
- 从头认识java-7.4 实现多重接口
- 从头认识java-7.7 嵌套接口
- 从头认识java-13.15 使用泛型时出现的问题(1)-泛型不能使用基础类型
- 从头认识java-13.15 使用泛型时出现的问题(2)-实现参数化接口与重载
- 从头认识java-10.7 使用异常的限制汇总
- 从头认识java-15.3 使用HashSet需要注意的地方
- 从头认识java-15.4 使用TreeSet需要注意的地方
- 从头认识java-15.5 使用LinkedHashSet需要注意的地方
- 从头认识java-18.3 什么时候使用同步?
- 从头认识java-13.5 利用泛型构建复杂模型
- 从头认识java-13.1 泛型与容器(容器的演变)
- 从头认识java-7.3 接口怎样解耦?
- 从头认识java-7.5 怎样通过继承扩展接口?
- 理解jquery的$.extend()、$.fn和$.fn.extend()
- springMVC 返回类型选择 以及 SpringMVC中model,modelMap.request,session取值顺序
- 4.MR老版流程源码解析
- IOS 系统定位提示完毕后 提示用户去开启定位权限
- iOS项目中常用的第三方开源库
- 从头认识java-13.3 泛型接口的使用
- hive udf添加永久生效三种方法
- 6.mr中理解分区和分组
- 资源访问机制之资源定义与解析流程
- java.util.ConcurrentModificationException问题解决
- linux基础(十三)----linux编程基础----linux运算符
- Caffe Matlab feature extraction 特征提取
- 数据库事务隔离级别与锁
- System.Threading.Mutex:一台电脑上面只有一个进程实例在运行,利用Mutex互斥量可以实现了这个功能