多路分发-枚举类型
来源:互联网 发布:ubuntu安装到u盘上 编辑:程序博客网 时间:2024/06/10 18:17
这个名词不太理解,直接引用书上的解释例子
如果一个系统要分析和执行数学表达式,我们可能会声明Number.plus(Number)和Number.multiple(Number)等等。其中Number是各种数字对象的超类。当使用a.plus(b)的时候,并不知道a或b的确切类型,如何能保证正确的交互呢?
java只支持单路分发,如果要执行上面的操作包含了不止一个类型未知的对象时,那么java的动态绑定机制只能处理其中一个类型。所以必须自己来判定其他的类型。
书上用enum实现多路分发的例子
import static enumerated.Outcome.*;public enum RoShamBo implements Competitor<RoShamBo>{PAPER(DRAW, LOSE, WIN),//如果自己是出布,对方出(布、剪刀和石头)输赢分别是(平局,输,赢)SCISSORS(WIN, DRAW, LOSE),ROCK(LOSE, WIN, DRAW);private Outcome vPaper, vScissors, vRock;//构造函数接受三个参数 依次是 布、剪刀和石头RoShamBo(Outcome paper, Outcome scissors, Outcome rock) {this.vPaper = paper;this.vScissors = scissors;this.vRock = rock;}@Overridepublic Outcome complete(RoShamBo comptitor) {switch (comptitor) {case PAPER:return vPaper;case SCISSORS:return vScissors;case ROCK:return vRock;default:return null;}}public static void main(String[] argv) {play(RoShamBo.class, 20);}//以下部分可以单独写为工具方法/** * <T extends Competitor<T>>规定传入的参数必须是Competitor<T>类型 * 这个不是返回值 这个方法是void的,没有返回 */public static <T extends Competitor<T>> void match(T a, T b) {System.out.println(a + " vs " + b + ": " + a.complete(b));}/** * 随机产生指定数量个场景(对象)进行游戏 * 调用了Enums工具方法Enums.random * <T extends Enum<T> & Competitor<T>> 规定传入的参数必须同时是Enum<T>和Competitor<T>类型 * @param rsbClass 用来比赛的对象 * @param size 数量 */public static <T extends Enum<T> & Competitor<T>> void play(Class<T> rsbClass, int size) {for(int i = 0; i < size; i++) {match(Enums.random(rsbClass), Enums.random(rsbClass));}}}输出结果
ROCK vs ROCK: DRAWSCISSORS vs ROCK: LOSESCISSORS vs ROCK: LOSESCISSORS vs ROCK: LOSEPAPER vs SCISSORS: LOSEPAPER vs PAPER: DRAWPAPER vs SCISSORS: LOSEROCK vs SCISSORS: WIN...
代码倒是可以理解,很有意思的一段代码。但是对多路分发这个,还不是太理解。。
0 0
- 多路分发-枚举类型
- java基础总结 --- enum枚举实现多路分发 石头、剪刀、布游戏示例
- 枚举类型
- 枚举类型
- 枚举类型
- 枚举类型
- 枚举类型
- 枚举类型
- 枚举类型
- 枚举类型
- 枚举类型
- 枚举类型
- 枚举类型
- 枚举类型
- 枚举类型
- 枚举类型
- 枚举类型
- 枚举类型
- .net string unicode 转换
- Unable to compile class for JSP JSP不能编译
- Maven3学习总结-环境搭建
- 完整详解GCD系列(一)dispatch_async;dispatch_sync;dispatch_async_f;dispatch_sync_f
- 多态、内部类、匿名内部类
- 多路分发-枚举类型
- 数组指针操作元素
- ping命令TTL的意思
- 坐标系
- 九度oj-剑指offer-题目1510:替换空格
- C++ builder系列之------#pragma详细解释
- 微软VS2015下载:开发Win10/Linux/iOS多平台软件
- 采用ajax提交POST数据的例子
- Jenkins配置