org.springframework.core.enums类图

    这个包按照说明是:Interfaces and classes for type-safe enum support on JDK >= 1.3。提供类型安全的枚举类型。代码也是相当简单,枚举类型又分为静态类型和通用类型。静态类型其实跟jdk1.5引进的enum类型类似,都是以int类型做code,比如声明一个Dog类型:

public static class Dog extends StaticLabeledEnum {

        private Dog(int code, String name) {
            super(code, name);
        }
    }

然后就可以这样声明枚举类型了:

public static final Dog BORDER_COLLIE = new Dog(13, "Border Collie");

public static final Dog WHIPPET = new Dog(14, "Whippet");

public static final Dog GOLDEN_RETRIEVER = new Dog(11, null) {
            // must set type to be recognized as a "Dog"
            public Class getType() {
                return Dog.class;
            }

            public String getLabel() {
                return "Golden Retriever";
            }
        };

同时有一个静态枚举类型的处理类用于提取信息:StaticLabeledEnumResolver ——这个类继承自抽象类AbstractCachingLabeledEnumResolver,而抽象类实现了接口LabeledEnumResovler,看看这个接口就知道所谓处理类是干什么的了:

public interface LabeledEnumResolver {

    //获取某个类中声明的枚举类型,这些类型   //必须是LabeledEnum的子类
    public Set getLabeledEnumSet(Class type) throws IllegalArgumentException;

    public Map getLabeledEnumMap(Class type) throws IllegalArgumentException;
   
    //根据code获取枚举
    public LabeledEnum getLabeledEnumByCode(Class type, Comparable code) throws IllegalArgumentException;

    //根据lable获取枚举
    public LabeledEnum getLabeledEnumByLabel(Class type, String label) throws IllegalArgumentException;

}

StaticLabeledEnumResolver 使用了单例模式,同时AbstractCachingLabeledEnumResolver定义了一个模板法方法并使用:

protected abstract Set findLabeledEnums(Class type);

也是一个Template Method模式应用的例子。

所谓通用性的枚举类型,是指不定义成static,并且可以灵活使用其他类型做code的枚举,比如spring已经内置的3种:ShortCodedLabeledEnum ,StringCodeLabeledEnum和LetterCodeLabeledEnum,这些类都继承自AbstractLabeledEnum,类名已经显示了它们的用途,不再细说。这个包完整的类图如下:
 

文章转自庄周梦蝶  ,原文发布时间5.17

时间: 2024-10-21 14:12:22

org.springframework.core.enums类图的相关文章

org.springframework.core.io包的类图

    org.springframework.core.io包中主要是各样的Resource类,Spring的 Resource 接口是为了提供更强的访问底层资源能力的抽象.具体的用法参考spring reference.这个包的类图非常简单,已经有人画的很清晰了,我直接拿过来,来自:Spring代码赏析:Resource类层次 相当巧妙的地方在于,为何AbstractResource的子类有的override了getFile()而有的没有?这是因为在AbstractResource的getF

java-myEclipse生成uml类图失败,报Unhandled event loop exception

问题描述 myEclipse生成uml类图失败,报Unhandled event loop exception 在用单个包或类可以正常生成uml类图,在用测试的小工程也可行,但是用在公司的工程上就失败了,不知道是不是工程太大,下面是log里的记录: !ENTRY org.eclipse.ui 4 0 2015-05-07 16:17:57.118 !MESSAGE Unhandled event loop exception !STACK 0 org.eclipse.swt.SWTError:

org.springframework.core简单分析

  这个包的类主要用于spring框架的异常处理和一些核心的助手类(与框架具体部分无关的).     这个包中主要应用到了简单工厂模式,用于判断jdk版本,根据jdk版本不同提供不同的集合类.当前方法栈信息等.我们来看看是如何判断当前用户的jdk版本的: package org.springframework.core; public class JdkVersion {          public static final int JAVA_13 = 0;          public 

怎样用一个例子讲解StarUML中的用例图、类图、时序图 ?

问题描述 怎样用一个例子讲解StarUML中的用例图.类图.时序图 ? 老师让我讲解StarUTML中的用例图.类图.时序图 , 我不想让老师失望 , 求解啊 请大家能给我一个简单例子 谢谢了

如何根据java源代码生成类图?

问题描述 如何根据java源代码生成类图? **我自己做了一个java模拟记事本,功能也比较齐全.但是要求画出类图,这个怎么画啊?我去百度上搜了,都不实用,总是遇到这样或那样的问题.请问应如何画这个类图,或者怎样由java代码生成类图?**

PHP与UML类图: PHP and UML Class Diagrams

这篇短文写的不错,用PHP来解释UML(或者反过来说)可以说是一个创新了,通过这篇文章,我也发现了一个好站: www.phppatterns.com .各UML术语的翻译来源于我正在看的<UML用户指南(The Unified Modeling Language User Guide)>一书. UML(Unified Modeling Language, 统一建模语言)是一种通过图的方式表示软件的机制.本质上它允许我们通过画图来设计我们的程序,并且如果有相应的工具,我们甚至可以从图来直接产生代

UML类图学习

类图,英文明曰:Class  diagram,那么类是经过怎样神奇的蜕变,变成了类图呢?大家都知道,类是具有相似结构.行为和关系的一组对象的描述符,类是面向对象系统中最重要的构造块,类图显示了一组类.接口.协作以及他们之间的关系.在UML中问题域最终要被逐步转化,通过类来建模,通过编程语言构件这些类从而实现系统,类加上他们之间的关系就构成了类图,类图中还可以包括接口.包等元素,也可以包含对象等实例. 现在我们一起来学习一下类图,首先我们一起来看看,类图之间存在哪些关系: 下面我们一起来对类图之间

UML学习:类图class的泛化关系

泛化关系的引入 在现实生活中,有时会出现一类事物具有另一类事物的全部特点,除此之外还有自身的特点. 例如: "不管白猫黑猫,捉到老鼠的就是好猫." 泛化关系的概念与符号(Generalization) 如果一个类A(父类)的属性和操作能被另一个类B(子类)所继承,则类B不仅可以包含类A中的属性和操作,而且还可以添加自己独有的属性和操作,这种机制就是泛化.泛化也称之为继承或派生. 泛化关系在程序中的体现 1 class student 2 { 3 public int number; 4

UML学习:类图class的依赖关系

依赖关系的概念与符号 依赖表示一个类以某种形式依赖于其他类.当两个类处于依赖关系中时,其中一个类的改变可能会影响另一个类. 符号: 依赖关系在代码中的表现 在程序代码中,依赖关系意味着一个类的对象出现在另一个类的操作中.常见的有两种情况:一个类将另一个类的对象作为自己某个操作的参数(形参),或者是操作的局部变量. 程序演示:code/train class train { public string number; public train(string num) { number = num;