`
liyanboss
  • 浏览: 142591 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

自定义类型安全的枚举

阅读更多
package com.goodhope.tradingapp.domain;



import java.io.Serializable;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import java.util.Map;



import com.goodhope.tradingapp.util.O;



public class SettlementStatus implements Serializable{



private static final long serialVersionUID = -6168031969764821429L;



public static final SettlementStatus NORMAL_STATUS = new SettlementStatus("结算中");



public static final SettlementStatus COMPLETE_STATUS = new SettlementStatus("完成");



public static final SettlementStatus FREEZE_STATUS = new SettlementStatus("已冻结");



public static final SettlementStatus DRAFT_STATUS = new SettlementStatus("处理中");



public static final SettlementStatus CLAIMSED_STATUS = new SettlementStatus("已理赔");



private String name;



private static final Map<String, SettlementStatus> VALUES = new HashMap<String, SettlementStatus>();



private static final int HASH_CODE_SEED = 91;



static {

VALUES.put("结算中", NORMAL_STATUS);

VALUES.put("完成", COMPLETE_STATUS);

VALUES.put("已冻结", FREEZE_STATUS);

VALUES.put("处理中", DRAFT_STATUS);

VALUES.put("已理赔", CLAIMSED_STATUS);

}



private SettlementStatus(String name) {

this.name = name;

}



public static SettlementStatus valueOf(String name) {

return VALUES.get(name);

}



public String getName() {

return name;

}



@Override

public boolean equals(Object obj) {

if (obj == null) {

return false;

}

if (!(obj instanceof SettlementStatus)) {

return false;

}

return ((SettlementStatus) obj).getName().equals(this.name);

}



@Override

public int hashCode() {

return HASH_CODE_SEED + O.safeHashCode(name);

}



static List<SettlementStatus> values() {

List<SettlementStatus> returnValue = new ArrayList<SettlementStatus>();

for (String key : VALUES.keySet()) {

returnValue.add(VALUES.get(key));

}

return returnValue;

}



@Override

public String toString() {

return name;

}

}

分享到:
评论
4 楼 liyanboss 2008-01-31  
引用
more effective java那本书里面似乎专门有将自定义类型安全的枚举


有时间把more effective java那本书好好看看。。。。
3 楼 skydream 2008-01-24  
more effective java那本书里面似乎专门有将自定义类型安全的枚举,上面的这个代码似乎是照抄后增加了一些额外的方法而已。

不过jdk5中的enum,呵呵,的确是类似实现,实际也就是一个class了,用起来比较方便而已,实质是一样的。
2 楼 liyanboss 2008-01-23  
呵呵,我也是觉得这个设计是很烂的呀,这个是公司的其他程序员搞的,我是看到中文觉得很不爽,才做了这个类似enum的类,仔细一想,其实jdk5的枚举,也应该是这么搞的吧。
1 楼 skydream 2008-01-18  
直接用中文? 这个可读性是不是好的过头了?

相关推荐

    qt文件操作读写自定义类型

    本例程重点介绍了如何在Qt环境下,通过重载QDataStream的operator和operator&gt;&gt;来实现自定义类型的数据读写,从而简化对文件的操作。 首先,理解QDataStream类是Qt中处理二进制数据流的核心工具,它允许我们以结构化...

    1.springbood+mybatis项目demo2.mybatis自定义枚举类型的转换器以及各种使用场景

    通过自定义枚举类型转换器,我们可以确保枚举值在数据库和Java对象之间正确、安全地转换,提高代码的可读性和可维护性。这个项目示例将帮助开发者更好地理解和掌握这一技术,并能在实际项目中灵活应用。

    C++程序设计讲义-自定义类型

    第七章“自定义类型”主要涵盖了结构体(Struct)、共用体(Union)以及枚举类型(Enumeration)。这些概念是C++面向对象特性的重要组成部分,能够帮助程序员更高效地组织和管理代码。 1. **结构体(Struct)**:...

    sharepoint 自定义字段类型

    2. 数据安全:如“SecureField”可能是一个专为敏感信息设计的字段类型,提供额外的加密或访问控制功能。 3. 与外部系统集成:当需要与外部数据库或应用程序交换数据时,自定义字段类型可以作为桥梁,确保数据的一致...

    Java枚举类型Enum的用法

    总结来说,Java枚举类型提供了一种安全、类型安全的方式来定义和使用常量,它可以拥有构造器、方法和字段,并能与switch语句、序列化、反射等Java特性很好地结合。理解并熟练使用枚举,能够使代码更加清晰、易读,...

    易语言DLL返回自定义类型源码.7z

    自定义类型在易语言中是指用户根据需求定义的数据结构,它可能是结构体、类或者枚举等。在DLL中使用自定义类型时,需要注意以下几点: 1. **类型声明**:首先,你需要在DLL的头文件中声明自定义类型,确保调用方和...

    springboot项目中枚举类型的最佳实践

    在Spring Boot项目中,枚举类型(Enums)的使用是一种常见的数据表示方式,它们提供了类型安全和可维护性。本文将深入探讨如何在Spring Boot应用中实现枚举类型的最佳实践,包括前端与后端交互、数据库操作以及序列...

    Java枚举类型.pdf

    在Java 5(也被称为Tiger)版本中引入,枚举类型极大地提高了代码的可读性、类型安全性和维护性。在本文中,我们将深入探讨Java枚举的定义、使用方法以及它如何改善传统使用`static final`常量的模式。 首先,让...

    hibernate映射枚举类型

    - 提供类型安全:避免了将枚举值硬编码为字符串或数字,减少了因拼写错误或值改变导致的bug。 - 易于维护:当需要添加、删除或修改枚举值时,只需要修改枚举类,而无需更改数据库表结构。 - **注意事项**: - ...

    枚举类型定义与变量声明定义的不同方法

    为了解决这个问题,C++11引入了枚举类(enum class),它提供了更强的类型安全性: ```cpp enum class Weekdays { Monday, Tuesday, ... }; ``` 在这种情况下,`Weekdays`成为一个独立的类型,不能直接与整数...

    5-枚举类型、输入输出、处理

    枚举类型不仅限于整数,还可以自定义它们的基础类型,如`byte`、`int`、`long`等,并可以为每个成员指定特定的值: ```csharp public enum Color : byte { Red = 1, Green = 2, Blue = 3 } ``` 在输入输出(Input/...

    enumjs:JavaScript中的类型安全枚举

    这是在JavaScript中实现类型安全枚举的尝试。 我最熟悉Java中枚举的工作方式,因此我在此之后对该库进行了建模。 JavaScript没有真正的枚举。 此问题的大多数解决方法都涉及使用映射,其中键表示枚举常量,并且值是...

    Java源码查看枚举类型定义.rar

    它在许多场景下比使用常量或int值更方便,因为枚举提供了更强的类型安全性和更好的可读性。本资源"Java源码查看枚举类型定义.rar"包含了关于Java枚举类型的详细解释和实例,旨在帮助开发者深入理解这一特性。 首先...

    C自定义数据类型PPT课件.pptx

    此外,虽然枚举类型可以看作是整数的集合,但它们具有更强的类型安全,因为它们不允许与其他类型的数据进行隐式转换,这有助于防止错误的类型匹配。 总结来说,C++中的枚举类型是一种强大的工具,用于定义一组相关...

    C语言开发之枚举类型详解

    枚举类型与预处理指令`#define`的一个主要区别在于作用域和类型安全。`#define`在预处理阶段进行替换,而枚举在编译阶段进行处理,这意味着枚举成员有其自身的类型,可以提供更强的类型检查。此外,枚举类型变量只能...

    Matlab实现最基本的枚举和算法检查报告.zip_Matlab 枚举法_matlab 枚举_matlab 枚举量_matlab

    虽然MATLAB的枚举是基于现有数据类型实现的,但它提供了更好的类型安全性和语义清晰度。理解枚举的概念对于编写清晰、可维护的代码至关重要,尤其是在涉及大量状态转换或决策分支的算法中。 7. **枚举与枚举类** ...

    理解java枚举类型

    总结,Java枚举类型提供了定义一组固定值的机制,增强了代码的类型安全性,可读性和可维护性。它们在程序设计中扮演着重要的角色,特别是在处理常量集和模式匹配的场景中。同时,枚举的灵活性允许实现接口,扩展其...

    C#泛型,非泛型实现枚举

    例如,`List&lt;T&gt;`就是一个泛型类,其中`T`代表一个未指定的类型,实际使用时可以是整型、字符串或其他自定义类型。 当我们想要在泛型中实现枚举功能时,可能的场景是在一个集合中存储一组特定类型的枚举值。例如,...

    枚举(switch、覆盖枚举、实现接口等)

    枚举在Java编程语言中是一种强大的工具,它...它们可以提供类型安全,防止非法值的使用,同时也简化了对一组固定值的操作。通过上述示例,我们可以看到枚举在定义常量、控制流程、扩展功能和分类组织等方面的广泛应用。

    java枚举实例代码

    此外,枚举可以实现接口,这使得它们可以具有自定义的行为。例如: ```java public interface Animal { void sound(); } public enum Species implements Animal { DOG("汪汪"), CAT("喵喵"); private String...

Global site tag (gtag.js) - Google Analytics