泛型不仅可以在类上实现,也可以在接口上实现。JDK中[Iterable<T> <-- Collection<E> <-- List<E>/Queue<E>/Set<E>]都是泛型接口。

下面是一个泛型接口的例子。这是一个一个生成器的例子。生成器用来专门创建对象。这是工厂方法设计模式的一种应用。一般来说生成器只有一个用来生成新的对象的方法。

 public interface Generator<T> {
T next();
boolean hasNext();
}
 public class CoffeeGenerator implements Generator<Coffee> {

     private int[] numList;

     private int pos;

     public CoffeeGenerator(int[] numList) {
this.numList = numList;
pos = 0;
} @Override
public Coffee next() {
switch (numList[pos++]) {
case Cappuccino.NUM:
return new Cappuccino();
case Latte.NUM:
return new Latte();
case Mocha.NUM:
return new Mocha();
default:
return null;
}
} @Override
public boolean hasNext() {
return numList != null && numList.length != 0 && numList.length > pos;
}
}
 public interface Coffee {
int getPrice();
void make();
}
 public class Cappuccino implements Coffee {

     public final static int NUM = 1;

     Cappuccino() {
make();
} @Override
public int getPrice() {
return 38;
} @Override
public void make() {
System.out.println("Making " + getClass().getSimpleName() + "...");
}
}
 public class Latte implements Coffee {

     public final static int NUM = 2;

     Latte() {
make();
} @Override
public int getPrice() {
return 32;
} @Override
public void make() {
System.out.println("Making " + getClass().getSimpleName() + "...");
}
}
 public class Mocha implements Coffee {

     public final static int NUM = 3;

     Mocha() {
make();
} @Override
public int getPrice() {
return 35;
} @Override
public void make() {
System.out.println("Making " + getClass().getSimpleName() + "...");
}
}

Main方法测试:

         Generator<Coffee> coffeeGen = new CoffeeGenerator(new int[] { 1, 3, 2, 1, 1, 3 });
int totalPrice = 0;
while (coffeeGen.hasNext()) {
Coffee coffee = coffeeGen.next();
totalPrice += coffee.getPrice(); // Making Cappuccino/Mocha/Latte/Cappuccino/Cappuccino/Mocha...
}
System.out.println(totalPrice); //

Java泛型(2):泛型接口的更多相关文章

  1. Java泛型(泛型接口、泛型类、泛型方法)

    转载 转载出处:https://www.cnblogs.com/JokerShi/p/8117556.html 泛型接口: 定义一个泛型接口: 通过类去实现这个泛型接口的时候指定泛型T的具体类型. 指 ...

  2. java 泛型 -- 泛型类,泛型接口,泛型方法

    泛型T泛型的许多最佳例子都来自集合框架,因为泛型让您在保存在集合中的元素上指定类型约束.在定义泛型类或声明泛型类的变量时,使用尖括号来指定形式类型参数.形式类型参数与实际类型参数之间的关系类似于形式方 ...

  3. java 泛型详解(普通泛型、 通配符、 泛型接口)

    java 泛型详解(普通泛型. 通配符. 泛型接口) JDK1.5 令我们期待很久,可是当他发布的时候却更换版本号为5.0.这说明Java已经有大幅度的变化.本文将讲解JDK5.0支持的新功能---- ...

  4. java 泛型详解(普通泛型、 通配符、 泛型接口,泛型数组,泛型方法,泛型嵌套)

    JDK1.5 令我们期待很久,可是当他发布的时候却更换版本号为5.0.这说明Java已经有大幅度的变化.本文将讲解JDK5.0支持的新功能-----Java的泛型.  1.Java泛型  其实Java ...

  5. java 泛型实例详解(普通泛型、 通配符、 泛型接口)

    java 泛型详解(普通泛型. 通配符. 泛型接口) 2013-02-04 19:49:49| 分类: JAVA | 标签:java |举报|字号 订阅 下载LOFTER客户端 JDK1.5 令我们期 ...

  6. 浅析Java 泛型

    泛型是JavaSE5引入的一个新概念,但是这个概念在编程语言中却是很普遍的一个概念.下面,根据以下内容,我们总结下在Java中使用泛型. 泛型使用的意义 什么是泛型 泛型类 泛型方法 泛型接口 泛型擦 ...

  7. Java:泛型基础

    泛型 引入泛型 传统编写的限制: 在Java中一般的类和方法,只能使用具体的类型,要么是基本数据类型,要么是自定义类型.如果要编写可以应用于多种类型的代码,这种刻板的限制就会束缚很多! 解决这种限制的 ...

  8. java泛型基础

    泛型是Java SE 1.5的新特性, 泛型的本质是参数化类型, 也就是说所操作的数据类型被指定为一个参数. 这种参数类型可以用在类.接口和方法的创建中, 分别称为泛型类.泛型接口.泛型方法.  Ja ...

  9. 【Java心得总结三】Java泛型上——初识泛型

    一.函数参数与泛型比较 泛型(generics),从字面的意思理解就是泛化的类型,即参数化类型.泛型的作用是什么,这里与函数参数做一个比较: 无参数的函数: public int[] newIntAr ...

  10. 初识Java泛型以及桥接方法

    泛型的由来 在编写程序时,可能会有这样的需求:容器类,比如java中常见的list等.为了使容器可以保存多种类型的数据,需要编写多种容器类,每一个容器类中规定好了可以操作的数据类型.此时可能会有Int ...

随机推荐

  1. Base64编码与解码的作用

    1.便于网络传输. 2.不可见性. 3.适合在http,mime协议下快速传输数据. 4 区别于加密,Base64是可以解码的,编码是 公开的,Base 64编码,任何人都可以解码

  2. Go语言值,指针,引用类型

    原文:https://www.jianshu.com/p/af42cb368cef ---------------------------------------------------- Go语言的 ...

  3. python : import详解。

    用户输入input() input()函数: 用于从标准输入读取数值. >>> message = input('tell me :') tell me :hahah >> ...

  4. springmvc处理一个请求的全流程

    首先,用户的浏览器发出了一个请求,这个请求经过互联网到达了我们的服务器. Servlet 容器首先接待了这个请求,并将该请求委托给 DispatcherServlet 进行处理. 接着 Dispatc ...

  5. Centos7 Memcached 安装

    1.Linux系统安装memcached,首先要先安装libevent库. yum install libevent libevent-devel 2.安装memcached yum install ...

  6. BZOJ 3289: Mato的文件管理 (区间查询逆序对)

    这道题就是不要求强制在线的 BZOJ 3744 Gty的妹子序列 所以说离线做法有莫队,在线做法见上面连接. 这里贴出常数巨大O(nnlogn)O(n\sqrt nlogn)O(nn​logn)分块+ ...

  7. 使用Jieba提取文章的关键词

    import jieba.analyse as analyse import matplotlib.pyplot as plt from wordcloud import WordCloud data ...

  8. BZOJ 2982 combination 脑子+组合数学

    可以发现,整个数列构成一个树形结构,并且是个完全二叉堆(小根堆). 并且这个堆的形态在给定$n$后是固定的,第1个位置上显然只能放1. 对子树的根来说,他自己是所分得的数集中最小的那个,所以从剩下$s ...

  9. PHP mysqli_fetch_lengths() 函数

    mysqli_fetch_lengths() 函数返回结果集中的字段长度. <?php // 假定数据库用户名:root,密码:123456,数据库:RUNOOB $con=mysqli_con ...

  10. bbs--点赞

    bbs---点赞 需求分析 页面展示 1 点赞  和   踩灭  按钮展示 1 用户未登录,不处理点赞踩灭,给用户提供登录接口 2 登录 1 第一次点点赞/踩灭 1 点赞成功 数据+1 提示点赞成功 ...