直接将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 678class Car{ private final i ... -
线程例子[Condition, SignlAll, await]
2012-02-09 22:05 1018package concurrency.waxomati ... -
生产者消费者[简单示例]
2012-02-09 21:38 651class Meal{ private final ... -
泛型[创建类型实例]
2012-02-06 01:01 727public Class Erased<T> ... -
多路分发3
2012-02-05 23:16 811使用常量相关的方法 常量相关的方法允许我们为每个 ... -
多路分发
2012-02-05 02:06 1369多路分发 Number.plus(Number) ... -
使用Enum的自动贩卖机
2012-02-04 13:52 908public enum Input { NICKEL ... -
使用enum的责任链
2012-02-04 12:39 1167package enumerated; impor ... -
枚举类Enum,EnumSet,EnumMap
2012-02-04 02:00 1407EnumSet与HashSet相比,非常快。 p ... -
枚举类enum
2012-02-03 15:00 895一般来说,我们希望每个美剧实例能够返回对自身的描述, ... -
类的简化历[从内部类到匿名内部类]
2012-02-02 12:41 626Version1: public class DirL ... -
持有引用java.lang.ref 和 WeakHashMap
2012-02-02 01:27 972Thinking in java P554 持 ... -
Collections快速报错 fial-fast
2012-02-02 00:46 774{ public static void main( ... -
散列HashCode
2012-02-01 14:04 693散列的价值在于速度: 散列使得查询快速,由于瓶颈位于键 ... -
使用散列数据结构注意点
2012-02-01 01:32 581Goundhog自动继承基类Object,所以这里使用 ... -
Set注意点
2012-02-01 01:31 294如果我们尝试着将没有恰当支持不许的操作的类型用于需要这些 ... -
享元Map
2012-01-30 00:28 374这里之所以叫享元,注意static关键字。 定制了Entry ... -
深入容器Map
2012-01-19 15:12 391Map生成器 对Map的使用相同的方式,需要一 ... -
深入容器List
2012-01-19 14:40 339一种Generator解决方案: 所有Collect ... -
泛型数组
2012-01-19 00:57 632不能创建泛型数组,但能通过转型来赋予 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;} ``` 这是...
Enum的用法Enum的用法Enum的用法Enum的用法
Java中的Enum的使用与分析
2. **创建Laravel Enum** 在Laravel中,我们通常创建一个enum类来表示枚举。首先,通过`php artisan make:enum UserRole`命令创建一个名为UserRole的enum。这个命令将在app/Enums目录下生成一个新文件,里面包含了...
在上面的示例中,我们使用 enum 来定义一个 `Signal` 枚举类型,并在 `TrafficLight` 类中使用 switch 语句来处理不同的信号状态。 用法三:添加新方法 如果我们想要在 enum 中添加新的方法,那么必须在 enum 实例...
在这个“enum 结构分析源码”资源中,我们主要关注的是C语言中的枚举使用和实现。C语言中的enum并不是一种真正的类型,而是对整型变量的一种别名,它提供了更易读的常量名称。 首先,我们来看`enum.c`这个源文件。...
php-enum, PHP Enum实现灵感来自 SplEnum PHP enum 实现来自 SplEnum 为什么?首先,SplEnum 并不集成到PHP中,你必须单独安装它。使用 enum 而不是类常量提供了以下优点:你可以键入提示: function setAction(Ac
综上所述,`java enum 枚举的spring boot2.x完美实现demo源码`示例主要展示了如何在Spring Boot 2.x项目中使用枚举类型,包括枚举的定义、属性和方法的添加,以及如何在实际业务场景中应用枚举,如与数据库的交互和...
用于枚举磁盘设备的 Enumdisk 示例
本文将深入探讨`enum`的简单使用方法以及如何结合委托(delegate)进行应用。 首先,我们来看如何声明一个枚举。在C#中,你可以使用`enum`关键字来创建一个新的枚举类型。下面是一个简单的例子: ```csharp public...
Laravel Enum库是为Laravel应用程序设计的一个扩展,它允许开发者使用枚举类型来替代传统的常量或字符串,从而使得业务逻辑更清晰,减少错误的可能性。下面将详细探讨Laravel Enum的使用、优点以及如何在项目中实现...
Java枚举类型(Enum)是Java SE 5.0引入的一种新的数据类型,它为开发者提供了更为强大且安全的方式来表示一组常量。枚举在Java中不仅是一个类,还是一种特殊的类型,允许我们定义自己的常量集合。接下来,我们将...
Python库是开发者在编程时经常会使用到的重要工具,它们提供了丰富的功能,可以帮助我们更...在使用`enum-0.4.7.tar.gz`压缩包时,你可以按照`README`文件的指示进行安装和测试,以便在项目中充分利用`enum`库的功能。
2. **使用String值传递**:除了ordinal,每个enum实例还有一个名称(即定义时的标识符)。可以将enum的名称作为String传递,然后在接收端通过反射机制创建对应的enum实例。 ```java public enum MyEnum { VALUE1(...
2. 枚举类的特点 枚举类中所有的构造器是 private 的,外部程序不能够创建枚举类的实例。枚举类中可以显式的指明调用哪个构建器,如 MEMBER 和 MEMBER() 这两种元素列表声明是等价的,都是调用默认的构建器,而 ...
常见的enum类型重定义的解决方法,清晰明了。
java枚举类型的定义使用介绍,还有示例。