Java编程思想:泛型接口
import java.util.Iterator; import java.util.Random; public class Test { public static void main(String[] args) { // ATester.test(); Tester.test(); } } interface Generator<T>{ T next(); } class A { } class a extends A{ } class b extends A{ } class c extends A{ } class d extends A{ } /* 思路: Generator这个生成器,你可以给它指定size,当你通过迭代器 调用它的生成方法时,你就只能生成你指定的size个元素。 */ class ATester implements Generator<A>,Iterable<A> { private Class[] types = {a.class,b.class,c.class,d.class}; private int size; ); public ATester() { } public ATester(int size) { this.size = size; } @Override public A next() { try{ return (A)types[rand.nextInt(types.length)].newInstance(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InstantiationException e) { e.printStackTrace(); } return null; } @Override public Iterator<A> iterator() { return new Iterator<A>() { int count = size; @Override public boolean hasNext() { ; } @Override public A next() { count--; return ATester.this.next(); } }; } static void test() { ATester g = new ATester(); ; i < ; i++) { System.out.println(g.next()); } } } /* 负责生成斐波那契数列的生成器! */ class Fibonacci implements Generator<Integer> { ,ppre=; ; @Override public Integer next() { int result; i++; ) { result=; }else{ result=pre+ppre; } ppre = pre; pre = result; return result; } } //这个方案计算量太多了 class Fibonacci2 implements Generator<Integer> { ; private int fbi(int i) { ) { ; } )+fbi(i-); } @Override public Integer next() { return fbi(++count); } } //编写一个适配器 class FibonacciAdaptor implements Iterable<Integer> { private int size; private Fibonacci fibonacci; public FibonacciAdaptor(int size, Fibonacci fibonacci) { this.size = size; this.fibonacci = fibonacci; } @Override public Iterator<Integer> iterator() { return new Iterator<Integer>() { //我的方案,感觉没有书中的优雅 //int i = 0; @Override public boolean hasNext() { //return i<size; ; } @Override public Integer next() { //i++; size--; return fibonacci.next(); } }; } } class Tester{ static void test() { Fibonacci f = new Fibonacci(); ; ) { System.out.print(f.next()+" "); i++; } System.out.println(); Fibonacci2 f2 = new Fibonacci2(); i = ; ) { System.out.print(f2.next()+" "); i++; } } }
Java编程思想:泛型接口的更多相关文章
- Java编程思想(11~17)
[注:此博客旨在从<Java编程思想>这本书的目录结构上来检验自己的Java基础知识,只为笔记之用] 第十一章 持有对象 11.1 泛型和类型安全的容器>eg: List<St ...
- JAVA编程思想——分析阅读
需要源码.JDK1.6 .编码风格参考阿里java规约 7/12开始 有点意识到自己喜欢理论大而泛的模糊知识的学习,而不喜欢实践和细节的打磨,是因为粗心浮躁导致的么? cron表达式使用 设计能力.领 ...
- Java编程思想 笔记
date: 2019-09-06 15:10:00 updated: 2019-09-24 08:30:00 Java编程思想 笔记 1. 四类访问权限修饰词 \ 类内部 本包 子类 其他包 publ ...
- JAVA编程思想(第四版)学习笔记----4.8 switch(知识点已更新)
switch语句和if-else语句不同,switch语句可以有多个可能的执行路径.在第四版java编程思想介绍switch语句的语法格式时写到: switch (integral-selector) ...
- 《Java编程思想》学习笔记(二)——类加载及执行顺序
<Java编程思想>学习笔记(二)--类加载及执行顺序 (这是很久之前写的,保存在印象笔记上,今天写在博客上.) 今天看Java编程思想,看到这样一道代码 //: OrderOfIniti ...
- #Java编程思想笔记(一)——static
Java编程思想笔记(一)--static 看<Java编程思想>已经有一段时间了,一直以来都把笔记做在印象笔记上,今天开始写博客来记录. 第一篇笔记来写static关键字. static ...
- [Java编程思想-学习笔记]第3章 操作符
3.1 更简单的打印语句 学习编程语言的通许遇到的第一个程序无非打印"Hello, world"了,然而在Java中要写成 System.out.println("He ...
- Java编程思想重点笔记(Java开发必看)
Java编程思想重点笔记(Java开发必看) Java编程思想,Java学习必读经典,不管是初学者还是大牛都值得一读,这里总结书中的重点知识,这些知识不仅经常出现在各大知名公司的笔试面试过程中,而 ...
- 《java编程思想》读书笔记(一)开篇&第五章(1)
2017 ---新篇章 今天终于找到阅读<java编程思想>这本书方法了,表示打开了一个新世界. 第一章:对象导论 内容不多但也有20页,主要是对整本书的一个概括.因为已经有过完整JAV ...
- Java编程思想——初始化与清理
PS:最近一直忙于项目开发..所以一直没有写博客..趁着空闲期间来一发.. 学习内容: 1.初始化 2.清理 1.初始化 虽然自己的Java基础还是比较良好的..但是在解读编程思想的时候还是发现了 ...
随机推荐
- 提示要求用户名和密码-localhost
同时安装了tomcat和oracle9i后,调试jsp出现--连接到localhost 提示:位于 XDB 的服务器 localhost 要求用户名和密码,原因是端口冲突,调整如下. 机器上装了ora ...
- Windows Phone Launcher class
Starts the default app associated with the specified file or URI. Launch a file contained in the app ...
- C++ 标准库概览(一分钟就看完了)
C++ 标准库以若干头文件的方式提供. 下面简单介绍一个各头文件的内容. 第一部分 容器 Containers <array> C++11 新增.提供了容器类模板 std::array,固 ...
- 获取UWP配置文件中的版本信息
原文:获取UWP配置文件中的版本信息 在一般的软件中,我们都会显示当前软件的版本信息.以前作者都是在发版的时候修改一下UWP的配置文件中的版本信息和软件中的版本信息.但是每次这样很麻烦,有时间忘记修改 ...
- ToolBarTray与ToolBarPanel的区别
ToolBarTray 类:表示处理ToolBar 的布局的容器.用于ToolBar控件模板之中. e.g. <ToolBarTray> <ToolBar> <Butto ...
- delphi 获取当前进程的cpu占用率
type TProcessCpuUsage = record private FLastUsed, FLastTime: Int64; FCpuCount:Integer; publ ...
- Qt4.8.6与VS2008的集成开发环境的安装配置
一.安装编译Qt 1. 在Windows下用Qt做开发,编译器可以用mingw的gcc/g++,也可以用VS. 2. 安装VS2008集成开发环境(完全安装). 3. 安装qt4.8.6(qt-op ...
- ring3下利用WMI监视进程创建(vc版)
#include "stdafx.h" #define _WIN32_DCOM #include <iostream> using namespace std; #in ...
- c#透明TextBox
在 http://www.codeproject.com/KB/edit/AlphaBlendedTextControls.aspx 的基础上增加了水印文字 代码如下: public class Te ...
- Unity 入門 - 延遲解析
本文大纲: 小引 共享的范例代码 使用 Lazy<T> 使用自动工厂 注入自定义工厂 小引 当我们说「解析某个型别/组件」时,意思通常是呼叫某类别的建构函式,以建立其实例(instance ...