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基础还是比较良好的..但是在解读编程思想的时候还是发现了 ...
随机推荐
- p批处理替换目录下文本中的字符串
@echo off rem 进入批处理文件所在的路径 cd C:\Users\zxh\Desktop\ " as "abc" ***** rem 定义要替换的新旧字符串 ...
- window下golang生成静态库给C语言调用
buidmod为c-archive能在window下生成 ,c-shared则不行 1.golang生成c-archive静态库 main.go package main import "C ...
- Android零基础入门第66节:RecyclerView点击事件处理
前面两期学习了RecyclerView的简单使用,并为其item添加了分割线.在实际运用中,无论是List还是Grid效果,基本都会伴随着一些点击操作,那么本期就来一起学习RecyclerView的点 ...
- Tensorflow初级篇
第二章 Tensorflow主要依赖两个工具:Protocol Buffer和Bazel Protocol. Protocol Buffer是一个结构数据序列化的的工具,在Tensorflow中大部分 ...
- 利用开源软件 Hugin 实现照片的景深合成,使用开源软件 enfuse 做照片的曝光合成
http://blog.csdn.net/liyuanbhu/article/details/53573847 http://blog.csdn.net/liyuanbhu/article/detai ...
- C# winform 主界面打开并关闭登录界面
在winform 界面编程中,我们有时候要在主界面打开之前先显示登录界面,当登录界面用户信息校验正确后才打开主界面,而这时登陆界面也完成使命该功成身退了. 目前有两种方法可实现: 方法1. 隐藏登录界 ...
- 用Delphi开发视频聊天软件
摘要:目前网上视频聊天软件.视频会议软件.可视IP电话软件随处可见,你是否想自己做一个玩玩?其实这类软件无非是视频加上网络而建成的.如果熟悉视频捕捉和网络传输技术,根本就难不倒你.微软为软件开发人员提 ...
- Model-View-Controller Explained in C++
The Permanent URL is: Model-View-Controller Explained in C++. The Model-View-Controller (MVC) is not ...
- 设置windows2008系统缓存大小限制,解决服务器运行久了因物理内存耗尽出僵死(提升权限后,使用SetSystemFileCacheSize API函数,并将此做成了一个Service)
声明: 找到服务器僵死的原因了,原因是虚拟内存设置小于物理内存. 只要虚拟内存设置为系统默认大小就不会出生僵死的现象了. 当时因为服务器内存48G,系统默认虚拟内存大小也是48G, 觉得太占硬盘空间, ...
- Mac OS下terminal的快捷键
时隔2年又开始使用Mac OS系统,之前的很多快捷键和常用的命令都忘记了,使用起来确实不方便,效率也低,特别是terminal下,所以对于terminal又找了一下并整理如下,希望对后来的同学也有用: ...