直接将RoShamBo1.java翻译为基于enum的版本是有问题的,因为enum实例不是类型,
不能将enum实例作为参数的类型,所以无法重载eval方法。
利用构造器来初始化每个enum实例,并以"一组"结果作为参数。二者放在一块,形成了
类似查询表的结构。
public interface Competitor<T extends Competitor<T>> { Outcome compete(T competitor); } public class RoShamBo { public static <T extends Competitor<T>> void match(T a, T b){ System.out.println(a +" vs. "+ b +": "+ a.compete(b)); } public static <T extends Enum<T> & Competitor<T>> void play(Class<T> rsbClass, size){ for(int i=0; i<size; i++){ match(Enums.random(rsbClass), Enums.random(rsbClass)); } } } public enum RoshamBo2 implements Competitor<RoshamBo2>{ PAPER(DRAW, LOSE, WIN), SCISSORS(WIN, DRAW, LOSE), ROCK(LOSE, WIN, DRAW); private Outcome vPAPER, vSCISSOR, vROCK; RoshamBo2(Outcome paper, Outcome scissor, Outcome rock){ this.vPaper = paper; this.vSCISSORS = scissors; this.vROCK = rock; } public Outcome compete(RoshamBo2 it){ switch(it){ default: case PAPER : return vPAPER; case SCISSOR : return vSCISSORS; case ROCK : return vROCK; } } }
compete()方法中, 一旦2种类型都被确定了,唯一的返回的结果是Outcome。
ranked还可能需要调用其他的方法,设置是调用在构造器中指定的某个明路对象上的
方法。
在RoShamBo1.java中, 2次分发多是通过实际的方法调用实现,而例子中,只有一次
分发是实际的方法调用。第二个分发使用的是switch,不过这样做是安全的,因为
enum限制了switch语句的选择分支。
发表评论
-
仿真[汽车制造]
2012-02-13 01:26 685class Car{ private final i ... -
线程例子[Condition, SignlAll, await]
2012-02-09 22:05 1031package concurrency.waxomati ... -
生产者消费者[简单示例]
2012-02-09 21:38 658class Meal{ private final ... -
泛型[创建类型实例]
2012-02-06 01:01 738public Class Erased<T> ... -
多路分发3
2012-02-05 23:16 828使用常量相关的方法 常量相关的方法允许我们为每个 ... -
多路分发
2012-02-05 02:06 1383多路分发 Number.plus(Number) ... -
使用Enum的自动贩卖机
2012-02-04 13:52 923public enum Input { NICKEL ... -
使用enum的责任链
2012-02-04 12:39 1179package enumerated; impor ... -
枚举类Enum,EnumSet,EnumMap
2012-02-04 02:00 1422EnumSet与HashSet相比,非常快。 p ... -
枚举类enum
2012-02-03 15:00 904一般来说,我们希望每个美剧实例能够返回对自身的描述, ... -
类的简化历[从内部类到匿名内部类]
2012-02-02 12:41 634Version1: public class DirL ... -
持有引用java.lang.ref 和 WeakHashMap
2012-02-02 01:27 981Thinking in java P554 持 ... -
Collections快速报错 fial-fast
2012-02-02 00:46 787{ public static void main( ... -
散列HashCode
2012-02-01 14:04 704散列的价值在于速度: 散列使得查询快速,由于瓶颈位于键 ... -
使用散列数据结构注意点
2012-02-01 01:32 590Goundhog自动继承基类Object,所以这里使用 ... -
Set注意点
2012-02-01 01:31 308如果我们尝试着将没有恰当支持不许的操作的类型用于需要这些 ... -
享元Map
2012-01-30 00:28 381这里之所以叫享元,注意static关键字。 定制了Entry ... -
深入容器Map
2012-01-19 15:12 398Map生成器 对Map的使用相同的方式,需要一 ... -
深入容器List
2012-01-19 14:40 342一种Generator解决方案: 所有Collect ... -
泛型数组
2012-01-19 00:57 637不能创建泛型数组,但能通过转型来赋予 public cl ...
相关推荐
目录介绍特征安装用法设置一个MappedValueRepresentable枚举使用MappedValueCollectionRepresented 使用MappedEnum类型的可编码枚举在ESet中使用OptionSet中的EnumSet 将EnumSet转换为Enum数组使用...
本篇将通过"Java Enum使用Demo源码"深入探讨Java枚举的用法。 首先,枚举在Java中是一个类,可以通过`enum`关键字来声明。例如,我们可以创建一个表示星期的枚举类型: ```java public enum WeekDay { MONDAY, ...
枚举(Enum)在Java中是一种特殊的类,用于定义固定的常量集合,它提供了一种安全、类型化的常量表示方式。以下是对Enum的详细讲解: 1. **基本枚举定义**: ```java enum Color {BLUE, RED, GREEN;} ``` 这是...
### Java中的Enum使用与分析 #### 一、概述 在Java编程语言中,`Enum`是一种特殊的数据类型,用于表示一组固定的常量值。通过枚举(`enum`),开发者可以更加直观地定义一系列预定义的值,并为这些值提供类型安全...
综上所述,`java enum 枚举的spring boot2.x完美实现demo源码`示例主要展示了如何在Spring Boot 2.x项目中使用枚举类型,包括枚举的定义、属性和方法的添加,以及如何在实际业务场景中应用枚举,如与数据库的交互和...
4. **使用私有构造函数**:虽然`Enum`禁止公开构造函数,但可以定义私有构造函数并在枚举体内部使用,以便为枚举值提供额外的信息或状态,如描述信息: ```java public enum Color { Red("This is Red"), Green...
2. **创建Laravel Enum** 在Laravel中,我们通常创建一个enum类来表示枚举。首先,通过`php artisan make:enum UserRole`命令创建一个名为UserRole的enum。这个命令将在app/Enums目录下生成一个新文件,里面包含了...
在上面的示例中,我们使用 enum 来定义一个 `Signal` 枚举类型,并在 `TrafficLight` 类中使用 switch 语句来处理不同的信号状态。 用法三:添加新方法 如果我们想要在 enum 中添加新的方法,那么必须在 enum 实例...
2. ENUM介绍与ENUM过程 ENUM是E.164电话号码映射协议,通过DNS系统将电话号码转换成域名。例如,电话号码+43 1 5056416经过以下步骤转换: - 清除非数字字符:24315056416 - 翻转数字顺序:6146505134 - 插入点分隔...
在这个“enum 结构分析源码”资源中,我们主要关注的是C语言中的枚举使用和实现。C语言中的enum并不是一种真正的类型,而是对整型变量的一种别名,它提供了更易读的常量名称。 首先,我们来看`enum.c`这个源文件。...
在编程中,`enum`(枚举)类型是用来定义一组命名的整数常量,它在C++中被广泛使用。然而,在某些情况下,我们可能会遇到`enum`类型的重定义问题,这通常发生在包含不同库或者头文件时,因为这些库可能已经定义了...
enum box box2; ``` 也可以在同一行定义多个变量: ```cpp enum { pencil, pen } box, box2; ``` #### 显式指定枚举元素的值 如果需要为枚举元素指定具体的值,可以在定义时直接指定: ```cpp enum box { ...
php-enum, PHP Enum实现灵感来自 SplEnum PHP enum 实现来自 SplEnum 为什么?首先,SplEnum 并不集成到PHP中,你必须单独安装它。使用 enum 而不是类常量提供了以下优点:你可以键入提示: function setAction(Ac
在Python 3.4中,引入了enum模块,它提供了一个Enum类,使得定义和使用枚举类型变得简单而强大。本文将详细介绍如何在Python中使用enum模块定义枚举,包括枚举的基础概念、定义方法、使用场景以及高级应用。 Python...
用于枚举磁盘设备的 Enumdisk 示例
本文将深入探讨`enum`的简单使用方法以及如何结合委托(delegate)进行应用。 首先,我们来看如何声明一个枚举。在C#中,你可以使用`enum`关键字来创建一个新的枚举类型。下面是一个简单的例子: ```csharp public...
Laravel Enum库是为Laravel应用程序设计的一个扩展,它允许开发者使用枚举类型来替代传统的常量或字符串,从而使得业务逻辑更清晰,减少错误的可能性。下面将详细探讨Laravel Enum的使用、优点以及如何在项目中实现...
ENUM_VALUE1, ENUM_VALUE2, ENUM_VALUE3, ...; } ``` 其中`EnumName`是枚举类型的名称,`ENUM_VALUE1`, `ENUM_VALUE2`等是枚举常量。这些常量默认是公有的、静态的和最终的。 **示例代码**: ```java enum Color...