1. 程式人生 > >JAVA常量類的實現方式_列舉類_專案實踐

JAVA常量類的實現方式_列舉類_專案實踐

前言

眾所周知,系統裡有很多比如訂單狀態、稽核狀態;性別、結算方式、交易型別等屬性,這些屬性只有幾個值,一般用0、1、2、3等的數字標識存入資料庫,每次對這些屬性所屬物件的增刪改操作,都會在程式碼裡給狀態設定值,由於專案是多人開發的,如果每次設定值的時候都直接set 0、1、2,容易出錯,而且狀態假設不用0、1、2表示了,用1、2、3表示,這時候所有set狀態的地方都得改變,維護麻煩。所以用常量表示狀態值,甚好。

據我目前所知,系統裡實現常量的方式有三種:

1,  介面常量

2,  類常量

3,  列舉

一:介面常量

Java程式裡實現常量,jdk1.5之前,沒有列舉類,有的用的介面來實現系統中的常量:

如java的swing裡有一個SwingConstant:

複製程式碼

public interface SwingConstants {

        /** 
         * The central position in an area. Used for
         * both compass-direction constants (NORTH, etc.)
         * and box-orientation constants (TOP, etc.).
         */
        public static final int CENTER  = 0;

        // 
        // Box-orientation constant used to specify locations in a box.
        //
        /** 
         * Box-orientation constant used to specify the top of a box.
         */
        public static final int TOP     = 1;
        /** 
         * Box-orientation constant used to specify the left side of a box.
         */
        public static final int LEFT    = 2;
       
       //。。。省略其他程式碼
   }

複製程式碼

介面常量,寫起來方便,看著簡潔,但是為了讓其他人知道每個常量的含義,必須寫註釋,如果需要在用到常量對應的資訊時候,需要看著註釋來寫。

如:在其他地方需要用到 SwingConstants.CENTER 的含義,必須看類裡的註釋,知道他表示中心。如果常量很多的話,把所有的常量都放在這一個接口裡邊,這種方式感覺也不是很友好。

申哥,瑞友的架構師,我的老鄉、偶像)看了申哥以前的專案,發現一個常量類,也是介面常量類,在接口裡定義靜態內部類,但是比上邊這種要好,他可以把不同的功能的常量類進一步分類,看程式碼:

複製程式碼

public interface UtilConstants {
    /**
     * 
     * 公共常量
     *
     */
    public static class Public {
        public static final String ID = "TESTID";
    }
    
    /**
     * JSP路徑
     */
    public static class JspFilePath {
        public static final String TESTCONTROLLER = "jsp/basic/"; 
        public static final String TEMPLATE_PAGEPATH = "basic/template/"; // 模板(測試)
    }
    
    /**
     * vo 物件的一些公共的屬性名稱 
     *
     */
    public static class VoFields {
        public static final String ACTIONTIME = "operateTime";//操作時間
        public static final String ACTIONUSERNAME = "operatorName";//操作人姓名
        public static final String CHECKTIME = "auditTime";//稽核時間
        public static final String CHECKUSERID = "checkUserId";//稽核人ID
        public static final String CHECKUSERNAME = "auditPerson";//稽核人姓名
        public static final String CREATETIME = "createTime";        // 建立時間
        public static final String CREATEUSERID = "createUserId";// 建立人code
        public static final String INSERTUSERNAME = "createUserName";// 建立人姓名
        public static final String UPDATETIME = "updateTime";        // 修改時間
        public static final String UPDATEUSERID = "updateUserId";// 修改人CODE
        public static final String UPDATEUSERNAME = "updateUserName";// 修改人姓名
        public static final String DELFLAG = "delFlag";             // 刪除標記
        public static final String DBID = "dbid";                    // 主鍵
    }
    
    
    
}

複製程式碼

使用,把不同功能的常量放在了介面的內部類裡,通過不同的內部類,呼叫的時候可以更明確好找吧。

UtilConstants.JspFilePath.TEMPLATE_PAGEPATH
UtilConstants.VoFields.CHECKTIME

二:類常量

目前中彩網的專案是這樣做的,還有過完年去待過4天的蛋疼學院的程式碼,也是這麼做的,雖然有了列舉,可能是由於設計者習慣問題,還有很多人用的類常量,

定義了類常量,用一個Map<Integer, String>來封裝常量對應的資訊,在static程式碼塊裡,類初始化的時候執行一次put。用的時候

ResponseCode.RESP_INFO.get("DATABASE_EXCEPTION");就能取出響應資訊

由於專案是前後端分離,在介面文件裡需要寫上狀態碼,還得寫上狀態碼對應的提示資訊,而且我們的響應類 RespInfo 有message屬性,就是儲存常量類裡狀態碼對應的資訊的。

程式碼:

複製程式碼

public class ResponseCode {

    /** 系統處理正常 */
    public static final int SUCCESS_HEAD = 0;

    /** 系統處理未知異常 */
    public static final int EXCEPTION_HEAD = 1;

    /** JSON解析錯誤 */
    public static final int JSON_RESOLVE = 2;

    /** 型別不匹配 */
    public static final int TRANSTYPE_NO = 3;

    /** Head - messageID未賦值 */
    public static final int HEAD_messageID = 4;

    /** Head - timeStamp未賦值 */
    public static final int HEAD_timeStamp = 5;

    /** Head - messengerID未賦值 */
    public static final int HEAD_messengerID = 6;

    /** Head - transactionType 未賦值 */
    public static final int HEAD_transactionType = 7;

    /** digest校驗不通過 */
    public static final int HEAD_DIGEST = 8;
    
    /** src校驗不通過 */
    public static final int HEAD_SRC_NULL = 10;
    
    /** 協議包含非法字元 */
    public static final int ILLEGAL_MESSAGE = 11;

    /** 資料庫異常 */
    public static final int DATABASE_EXCEPTION = 9;
    public static final Map<Integer, String> RESP_INFO = new HashMap<Integer, String>();

    static {
        // Head 相關
        RESP_INFO.put(SUCCESS_HEAD, "系統處理正常");
        RESP_INFO.put(EXCEPTION_HEAD, "系統處理未知異常");
        RESP_INFO.put(JSON_RESOLVE, "JSON解析錯誤");
        RESP_INFO.put(TRANSTYPE_NO, "型別不匹配");
        RESP_INFO.put(HEAD_messageID, "messageID未賦值");
        RESP_INFO.put(HEAD_timeStamp, "timeStamp未賦值");
        RESP_INFO.put(HEAD_messengerID, "messengerID未賦值");
        RESP_INFO.put(HEAD_transactionType, "transactionType未賦值");
        RESP_INFO.put(HEAD_DIGEST, "digest校驗不通過");
        RESP_INFO.put(DATABASE_EXCEPTION, "資料庫異常");
        RESP_INFO.put(HEAD_SRC_NULL, "src未賦值");
        RESP_INFO.put(ILLEGAL_MESSAGE, "協議包含非法字元");
        
    }
}

複製程式碼

這種類常量比介面常量好,因為可以定義狀態碼對應的提示資訊。

三:列舉

所有的列舉類都是Enum類的子類,就行Object類一樣,只是沒有寫出來,所以可以列舉類可呼叫Enum的方法。注意是逗號分隔屬性,只有屬性後邊沒有方法的話,最後加不加分號都行

程式碼:

public enum Season {
    SPRING,SUMMER,AUTUMN ,WINTER
}

使用:可以直接使用屬性,也可以呼叫Enum的方法如values方法

System.out.println(Season.AUTUMN);
        System.out.println(Season.values());
        Season[] values = Season.values();
        System.out.println(values[0]);

可以在列舉類中新增一些構造器、方法和域:

私有化構造器,構造器只是在構造列舉常量的時候被呼叫如SMALL(“S”)

複製程式碼

/**
 * 衣服尺寸
 */
public enum Size {

    SMALL("S"),
    MEDIUM("M"),
    LARGE("L"),
    EXTRA_LARGE("XL");
    
    /**
     * 縮寫
     */
    private String suoxie;
    
    private Size(String suoxie){
        this.suoxie = suoxie;
    }
    
    public String getSuoxie(){
        return suoxie;
    }
    
    
    
    public static void main(String[] args) {
        //1:toString()方法返回常量的名 
        System.out.println(Size.SMALL.toString());//SMALL
        
        //2:valueOf()
        System.out.println(Size.valueOf("LARGE"));
        
        //3:values:返回每個常量名
        //SMALL MEDIUM LARGE EXTRA_LARGE
        Size[] sizes = Size.values();
        /*for (Size size : sizes) {
            System.out.println(size);
        }*/
        
        //4:ordinal 返回常量的位置,從0開始
        System.out.println(Size.LARGE.ordinal());
        
        int i = Size.EXTRA_LARGE.compareTo(Size.EXTRA_LARGE);
        System.out.println(i);

System.out.println(Size.LARGE.getSuoxie());
    }
}

複製程式碼

申哥的列舉:

實際專案中不會每個型別都弄一個列舉類,假設那樣,系統中會有很多列舉類,每個類裡邊只有幾個屬性,那樣類太多,感覺沒必要,所以申哥設計了一個常量類Constants,在常量類裡定義了多個靜態列舉類,這個和上邊說的申哥在介面常量裡定義靜態內部類有點類似,不過現在換成了列舉。

接口裡定義靜態內部類好處:對不同功能的常量進行分類,用起來比較明確,但是由於是interface,裡邊不能定義static靜態程式碼塊,所以沒辦法像類常量那樣即定義常量狀態碼,又在map裡放對應的說明資訊,只能通過註釋給開發人員用的時候看。

 申哥的這種做法算是兩全其美,在一個常量類裡,定義多個靜態的列舉,列舉類定義兩個引數的構造器,一個相當於key,一個是value,屬性也是final型別的,每個列舉對應實體物件的一種狀態,甚好。

程式碼:

複製程式碼

public class Constants {
    public static enum Dict{
        PROSTA("PROSTA","產品狀態"),
        COUNTRY("COUNTRY","國家"),
        
        YWLX("YWLX","業務型別"),
        INDUSTRYCOMPANYTYPE("IndustryCompanyType","公司型別"),
        JSFS("JSFS","結算方式"),
        COMMISSIONTYPE("COMMISSIONTYPE","返傭型別"),
        BALUNITTYPE("BALUNITTYPE","結算單位型別"),
        ORDERSTATS("OrderStats","訂單狀態"),
        BACKORDERSTATUS("BackOrderStatus","退單稽核狀態"),
        BUSINESSPAYMENT("BusinessPayment","業務款項"),
        ENABLESTATE("enableState","啟用禁用"),
        APPROVESTATE("approveState","審批狀態"),
//        分銷系統所需是商品系統的xml
        PRODUCTCONTENTTYPE("productContentType","商品內容分類"),
        IDENTITY("identity","適應人群"),
        AREA("area","領區"),
        VISATYPE("visatype","簽證型別"),
        SERVICETYPE("serviceType","公證認證商品內容分類"),
        PRODUCTTYPEQUALITY("productTypeQuality","公證認證商品性質"),
        EXPRESSTYPE("expresstype","公證認證加急種類"),
        IDETIFICATIONTYPE("identificationType","認證類別"),
        QYKHLX("QYKHLX","客戶型別"),
        ZILIAONAME("ziliaoName","資料名稱"),
        YESORNO("yesOrNo","是否");

        
        
        private Dict(String value,String name){
            this.value=value;
            this.name=name;
        }
        private final String value;
        private final String name;
        
        public String getValue() {
            return value;
        }

        public String getName() {
            return name;
        }
    }
    /**
     * 訂單狀態
     * <p>Company:rayootech</p>
     * @author zhangxueshen
     * @date 2016-6-14
     */
    public static enum OrderStats{
        
        DELETE(0,"刪除"),RESERVE(1,"訂單預定"),CONFIRM(2,"訂單確認"),COMPLETE(3,"訂單完成"),CLOSE(4,"訂單關閉");
        
        private OrderStats(Integer value,String name){
            this.value = value;
            this.name = name;
        }
        private final Integer value;
        private final String name;
        
        public Integer getValue() {
            return value;
        }

        public String getName() {
            return name;
        }
        
    }
    /**
     * 性別
     * <p>Company:rayootech</p>
     * @author zhangxueshen
     * @date 2016-6-14
     */
    public static enum sex{
        
        MAN("1","男"),FEMAN("2","女");
        
        private sex(String value,String name){
            this.value = value;
            this.name = name;
        }
        private final String value;
        private final String name;
        
        public String getValue() {
            return value;
        }

        public String getName() {
            return name;
        }
        
    }
    /**
     * 退單稽核狀態
     * <p>Company:rayootech</p>
     * @author zhangxueshen
     * @date 2016-6-14
     */
    public static enum BackOrderStatus{
        WAIT(1,"待稽核"),AUDIT(2,"稽核中"),PASS(3,"稽核通過"),NOTPASS(4,"稽核不通過");
        private BackOrderStatus(Integer value,String name){
            this.value = value;
            this.name = name;
        }
        private final Integer value;
        private final String name;
        
        public Integer getValue() {
            return value;
        }

        public String getName() {
            return name;
        }
    }
    /**
     * 結算方式
     * <p>Company:rayootech</p>
     * @author zhangxueshen
     * @date 2016-6-14
     */
    public static enum jiesuan{
        XIANJIE("1","現結"),YUEJIE("2","月結");
        private jiesuan(String value,String name){
            this.value = value;
            this.name = name;
        }
        private final String value;
        private final String name;
        
        public String getValue() {
            return value;
        }

        public String getName() {
            return name;
        }
    }
    /**
     * 業務款項
     * <p>Company:rayootech</p>
     * @author zhangxueshen
     * @date 2016-6-14
     */
    public static enum BusinessPayment{
        VISA("FUND18","簽證費"),PREMIUMS("FUND07","保險"),DEPOSIT("FUND10","押金"),CANCELLING("FUND12","取消金"),FUND20("FUND20","單項服務"),FUND14("FUND14","認證費"),FUND09("FUND09","團款");
        private BusinessPayment(String value,String name){
            this.value = value;
            this.name = name;
        }
        private final String value;
        private final String name;
        
        public String getValue() {
            return value;
        }

        public String getName() {
            return name;
        }
    }
    /**
     * 通用的啟用禁用狀態
     * <p>Company:rayootech</p>
     * @author zhangxueshen
     * @date 2016-6-14
     */
    public static enum EnableState{
        DISABLE(0,"禁用"),ENABLE(1,"啟用");
        private EnableState(Integer value,String name){
            this.value = value;
            this.name = name;
        }
        private final Integer value;
        private final String name;
        
        public Integer getValue() {
            return value;
        }

        public String getName() {
            return name;
        }
    }
    /**
     * 通用的審批狀態
     * <p>Company:rayootech</p>
     * @author zhangxueshen
     * @date 2016-6-14
     */
    public static enum ApproveState{
        REJECT(0,"不通過"),PASS(1,"通過");
        private ApproveState(Integer value,String name){
            this.value = value;
            this.name = name;
        }
        private final Integer value;
        private final String name;
        
        public Integer getValue() {
            return value;
        }

        public String getName() {
            return name;
        }
    }
    /**
     * 通用的是否
     * <p>Company:rayootech</p>
     * @author zhangxueshen
     * @date 2016-6-14
     */
    public static enum YesOrNo{
        NO(0,"否"),YES(1,"是");
        private YesOrNo(Integer value,String name){
            this.value = value;
            this.name = name;
        }
        private final Integer value;
        private final String name;
        
        public Integer getValue() {
            return value;
        }

        public String getName() {
            return name;
        }
    }
    /**
     * 業務狀態
     * <p>Company:rayootech</p>
     * @author zhangxueshen
     * @date 2016-6-18
     */
    public static enum ServiceStatus{
        NORMAL(1,"正常辦理"),CHANGEING(2,"應收變更中"),BACKING(3,"退單中"),BACK(4,"退單");
        private ServiceStatus(Integer value,String name){
            this.value = value;
            this.name = name;
        }
        private final Integer value;
        private final String name;
        
        public Integer getValue() {
            return value;
        }

        public String getName() {
            return name;
        }
    }
    /**
     *  支付狀態
     * <p>Company:rayootech</p>
     * @author zhangxueshen
     * @date 2016-6-16
     */
    public static enum PayStatus{
        NOTPAY("01","未支付"),PARTPAY("02","部分支付"),FINISHPAY("03","支付完成");
        private PayStatus(String value,String name){
            this.value = value;
            this.name = name;
        }
        private final String value;
        private final String name;
        
        public String getValue() {
            return value;
        }

        public String getName() {
            return name;
        }
    }
    public static enum DeleteStatus{
        NORMAL(1,"正常"),DELETE(0,"刪除");
        private DeleteStatus(Integer value,String name){
            this.value = value;
            this.name = name;
        }
        private final Integer value;
        private final String name;
        
        public Integer getValue() {
            return value;
        }

        public String getName() {
            return name;
        }
    }
    /**
     *  訂單型別,主要是判斷訂單是從哪個系統推送過來的,
     * <p>Company:rayootech</p>
     * @author zhangxueshen
     * @date 2016-6-16
     */
    public static enum OrderType{
        SALE("DDLY010301","ERP"),DISTRIBUTION("DDLY0104","分銷平臺");
        private OrderType(String value,String name){
            this.value = value;
            this.name = name;
        }
        private final String value;
        private final String name;
        
        public String getValue() {
            return value;
        }

        public String getName() {
            return name;
        }
    }
    public static enum CommonFieldEnum {
        DBID("dbid",UUID.randomUUID().toString().replace("-", "")), //主鍵
        CREATEPERSONNAME("createpersonname","username"),//建立人姓名
        CREATEPERSONCODE("createpersoncode","usercode"),//建立人姓名
        CREATEUSTIME("createtime",new Date()),//建立時間
        UPDATEPERSONNAME("updatepersonname","username"),//更新人姓名
        UPDATEPERSONCODE("updatepersoncode","usercode"),//更新人姓名
        UPDATETIME("updatetime",new Date()),//更新時間
        ACTIONPERSONNAME("actionpersonname","username"),//操作人姓名
        ACTIONPERSONCODE("actionpersoncode","usercode"),//操作人code
        ACTIONTIME("actiontime",new Date()),//操作時間
        ;
        private CommonFieldEnum(String value, Object type) {
            this.value = value;
            this.type = type;
        }

        private final String value;
        private final Object type;
        
        public String getValue() {
            return value;
        }
        public Object getType() {
            return type;
        }
    }

    /**
     *  業務型別
     * <p>Company:rayootech</p>
     * @author xudf
     * @date 2016-6-17
     */
    public static enum BusinessType{
        NOTARY("YWLX09","簽證-公證認證"),VISA("YWLX10","簽證-單辦簽證"),NOTVISA("YWLX16","簽證其他"),INSURANCE("YWLX11","保險-單辦保險");
        private BusinessType(String value,String name){
            this.value = value;
            this.name = name;
        }
        private final String value;
        private final String name;
        
        public String getValue() {
            return value;
        }

        public String getName() {
            return name;
        }
    }
    /**
     * 鎖單狀態
     * <p>Company:rayootech</p>
     * @author zhangxueshen
     * @date 2016-6-16
     */
    public static enum LockStatus{
        NORMAL(0,"正常"),RECEIVCHANGE(1,"應收變更鎖單中"),SEALED(2,"客人封存更鎖單中"),BACK(3,"退單更鎖單中");
        private LockStatus(Integer value,String name){
            this.value = value;
            this.name = name;
        }
        private final Integer value;
        private final String name;
        
        public Integer getValue() {
            return value;
        }

        public String getName() {
            return name;
        }
    }
    
    
    
    public static void main(String[] args) {
        String key = Constants.ServiceStatus.NORMAL.getName();
        int value = Constants.ServiceStatus.NORMAL.getValue();
        System.out.println(key+":"+ value);
        
    }
}

複製程式碼

相關推薦

JAVA常量實現方式_列舉_專案實踐

前言 眾所周知,系統裡有很多比如訂單狀態、稽核狀態;性別、結算方式、交易型別等屬性,這些屬性只有幾個值,一般用0、1、2、3等的數字標識存入資料庫,每次對這些屬性所屬物件的增刪改操作,都會在程式碼裡給狀態設定值,由於專案是多人開發的,如果每次設定值的時候都直接set 0

Integer實現方式和註意事項

裝箱 col 基本類 引用 big 長度 i++ length 通過 java.lang.Integer類的源代碼: //定義一個長度為256的Integer數組 static final Integer[] cache = new Integer[-(-128) + 1

Java序列化的方式、object中的方法、介面和抽象的區別、ArrayList在迴圈過程中刪除

Java序列化的方式 a.是相應的物件實現了序列化介面Serializable,這個使用的比較多,對於序列化介面Serializable介面是一個空的介面,它的主要作用就是標識這個物件時可序列化的,jre物件在傳輸物件的時候會進行相關的封裝。 b.Externlizab

重新認識java(十) ---- Enum(列舉

有的人說,不推薦使用列舉。有的人說,列舉很好用。究竟怎麼使用,如何使用,仁者見仁智者見智。總之,先學會再說~ 為什麼要引入列舉類 一個小案例 你寫了一個小程式,不過好久不用了,突然有一天,你想使用一下它。程式要想正確執行,需要將今天星期幾存

JAVA第四次作業——使用列舉對撲克牌建模

0x00  簡述 使用列舉型別對一副撲克牌(52張牌,不包括大小王)建模: 一副撲克牌有四種花色(Suit):HEART,SPADE,DIAMOND,CLUB; 有十三種等級(Rank):ACE,TWO,THREE,FOUR,FIVE,SIX,SEVEN,EIG

Java自定義實現Comparable介面的實現多維排序

Java中提供了Arrays和Collections類能夠幫助我們來實現排序,但是前提是陣列或者集合中的元素都必須實現Comparable介面,基本的資料型別對應的類都已經實現了Comparable介面了,所以我們才能夠直接對含有基本型別的陣列和集合進行排序,大家可以看一下

利用java反射機制實現javaweb自動呼叫的方法

public class BookServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequ

java根據輸入值例項化列舉enum-switch

java5引入了列舉類這一新特性,最近開發用到了,主要是用來解決將大量判斷if-else語句轉換為switch-case語句,這樣程式從執行效率和可讀性都會得到很大提升。 關於列舉類,網上的資料都沒怎麼提到,如何根據一個動態的輸入值,來得到該列舉類的例項,這裡參考了一篇文章

史上最全面的SignalR系列教程-2、SignalR 實現推送功能-永久連線實現方式

1、概述 通過上篇史上最全面的SignalR系列教程-1、認識SignalR文章的介紹,我們對SignalR技術已經有了一個全面的瞭解。本篇開始就通過SignalR的典型應用的實現方式做介紹,例子雖然簡單,但麻雀雖小五臟俱全。可以以此為基礎,擴充套件到實際應用中。 SignalR 的實現機制與.NET WCF

史上最全面的SignalR系列教程-3、SignalR 實現推送功能-集線器實現方式

1、概述 通過前兩篇 史上最全面的SignalR系列教程-1、認識SignalR 史上最全面的SignalR系列教程-2、SignalR 實現推送功能-永久連線類實現方式 文章對SignalR的介紹,我們對SignalR已經有了全面的認識。SignalR API 客戶端和伺服器端持久連線的通訊方式,一次連線代

連結串列反轉(Java三種實現方式)

Mackyhuang 連結串列這個資料結果經常遇見,這裡提供一個連結串列反轉的java程式碼實現,有三種演算法,一種是遞迴的,倆種是非遞迴的。 首先為了方便測試,在博文最後貼上遞迴實現連結串列建立的程式碼,以供讀者快速上手測試,提供的程式碼可以複製以後直接測

Java 執行緒實現方式

程序與執行緒 在傳統的作業系統中,最核心的概念是“程序”,程序是對正在執行的程式的一個抽象。程序的存在讓“並行”成為了可能,在一個作業系統中,允許執行著多個程序,這些程序“看起來”是同時在執行的。如果我們的計算機同時執行著 web 瀏覽器、電子郵件客戶端、即時通訊軟

淺談JAVA常用分散式實現方式及優缺點

常用的有EJB、rmi、Web Service,還有Hessian、NIO等,它們的優缺點比較比下:1:EJB    優勢:可擴充套件性好,安全性強,支援分散式事務處理。    劣勢:不能跨語言;配置相對複雜,不同J2EE容器之間很難做無縫遷移。2:rmi    優勢:面向物件的遠端服務模型;基於TCP協議上

【C/C++開發】C++之enum列舉量宣告、定義、使用與列舉詳解與列舉前置型別宣告

前面講到可以通過強制轉換將其他型別值賦給列舉變數:Weekday = enumType(2);這是合法的;但是Weekday = enumType(20);是非法的。這裡涉及列舉取值範圍的概念:列舉的上限是 大於最大列舉量的 最小的2的冪,減去1; 列舉的下限有兩種情況:一、列舉量的最小值不小於0,則列

JAVA常用集合實現方式的總結

    本篇主要是對之前的集合原始碼閱讀系列部落格的一個總結,如果沒有看過之前的部落格或者集合原始碼,很可能看不懂下面的內容。     文章開始之前,首先簡單回顧一下資料結構中定義的物理結構和

java匯出word實現方式一,在jsp中實現

參考:http://ll-feng.iteye.com/blog/345873 在jsp頁面中引入下面: <%@ page contentType="application/vnd.ms-word; charset=utf-8"%>   <%@pag

你瞭解封裝的繼承以及列舉之間的恩怨糾葛嗎?

作者:feintkotlin(Kotlin學習網) Kotlin學習QQ群:543182119 說明:文章的內容是基於Kotlin的語法 對與類的繼承和列舉類,大家應該都比較熟悉。但咱還是要簡單的進行一下說明。 類的繼承就好比是泰迪到處播

Python 元,MethodType,列舉

元類 簡介 類也是物件,你可以在執行時動態的建立它們,就像其他任何物件一樣;當你使用class關鍵字時,Python直譯器自動建立這個物件 元類就是用來建立類的“東西”;元類就是類的類 Python中所有的東西,注意,我是指所有的東西——都是

快排的java兩種實現方式

快排是最基礎的幾個排序演算法之一,今天再來回顧下 public class QuickSort { public static void quickSort(int[] array){ if(array != null){ quickSort(array,

思想無語言邊界:以 cglib 介紹 AOP 在 java 的一個實現方式

# 0. 前言 上接:基於 Source Generators 做個 AOP 靜態編織小實驗 作為第三篇,我們基於cglib在java做一個簡單的aop例子, 以此簡單作為例子說一個思路在什麼樣的語言裡面都是共同的,這是骨,不要糾結什麼語言什麼實現,這只是皮。 同以前一樣,是個人隨筆,不是新手教學,不