• java中枚举的常见用法


    java中枚举的常见用法

    概念:

    首先枚举是一个特殊的class,所有的枚举都继承自java.lang.Enum类。由于Java 不支持多继承,所以枚举对象不能再继承其他类

    他的构造方法强制被私有化。每个枚举变量都是枚举类的实例,每个成员变量都是final static修饰

    一、枚举型常量

    public enum ColorEnum {
        //每个枚举变量都是枚举类ColorEnum的实例,相当于RED=new ColorEnum(1),按序号来。
        //每个成员变量都是final static修饰
        RED, GREEN, BLANK, YELLOW;
    }

    二、带一个参数的枚举

    public enum TypeEnum {
    
        FIREWALL("firewall"),  
        SECRET("secretMac"),  
        BALANCE("f5");  
    
        private String typeName;  
    
        TypeEnum(String typeName) {  
            this.typeName = typeName;  
        }  
    
        /** 
         * 根据类型的名称,返回类型的枚举实例。 
         * 
         * @param typeName 类型名称 
         */  
        public static TypeEnum fromTypeName(String typeName) {  
            for (TypeEnum type : TypeEnum.values()) {  
                if (type.getTypeName().equals(typeName)) {  
                    return type;  
                }  
            }  
            return null;  
        }  
    
        public String getTypeName() {  
            return this.typeName;  
        }    
    }
     eg:
    // 根据不同登录用户类型查询用户的角色信息
            switch (UserTypeEnum.getUserType(userType)) {
                case HOST_ENTERPRISE:
                    // 查询主办企业用户角色
                    break;
                case EMPLOYEE:
                    // 查询 平台员工角色
                    break;
                case MOVE_IN_BUSINESS:
                    // 查询 入住企业用户角色
                    break;
                default:
                  //  ....
                    break;
            }

    三、Java枚举实现接口

    为什么要通过枚举实现接口呢?考虑如下需求: 
    1.我希望通过接口定义API 
    2.我希望接口的实现类有限,并且每个实现类都只需要一个实例 
    此时,可以利用枚举类型实例受限的特效,通过枚举实现接口,从而达到我们的需求。

    eg:如下根据不同位置选择不同的方法打水印:

    interface

    public interface IGetWatermarkImage {
        /**
         * 水印的字体
         */
         String FONT = "YouYuan";
        /**
         * 水印字体大小
         */
        Integer FONT_SIZE = 30;
        /**
         * 水印图片的固定高度
         */
        Integer WATERMARK_IMAGE_HEIGHT = 140;
        /**
         * 水印文字的行间距离
         */
        Integer WATERMARK_LINE_HEIGHT = 20;
    
        /**
         * 获取一张水印图片
         * @param watermarkColor 水印的颜色
         * @param watermarkMessages 水印的内容
         * @param orgBufferImage 需要打水印的原图片
         * @return
         */
        BufferedImage getWatermarkImage(String watermarkColor,
                                  ArrayList<String> watermarkMessages,
                                        BufferedImage orgBufferImage);
    }
    public enum PositionEnum implements IGetWatermarkImage {
    
        //    {1:'底部居中',2:'底部靠左',3:'底部靠右',4:'顶部居中',5:'顶部靠左',6:'顶部靠右'}
        BOTTOM_CENTER(1) {
            @Override
            public BufferedImage getWatermarkImage(String watermarkColor,
                                                   ArrayList<String> watermarkMessages,
                                                   BufferedImage orgBufferImage) {
                int orgImageWidth = orgBufferImage.getWidth();
                int orImageHeight = orgBufferImage.getHeight();
                BufferedImage bufferedImage = new BufferedImage(orgImageWidth, WATERMARK_IMAGE_HEIGHT, BufferedImage.TYPE_INT_RGB);
               BufferedImageGraphicsConfig config = BufferedImageGraphicsConfig.getConfig(bufferedImage);
               bufferedImage =config.createCompatibleImage(orgImageWidth, WATERMARK_IMAGE_HEIGHT, Transparency.TRANSLUCENT);
                Graphics2D graphics2D = bufferedImage.createGraphics();
                /* 消除java.awt.Font字体的锯齿 */
                graphics2D.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
                graphics2D.setColor(getColorByColorStr(watermarkColor)); //设置文字的颜色
                Font font = new Font(FONT, Font.BOLD, FONT_SIZE);
                graphics2D.setFont(font);
                //  水印文字的高度
                int watermarkMessageHeight = getStringHeight(graphics2D);
                // 计算水印文字的总高度
                int totalHeight = watermarkMessageHeight * (watermarkMessages.size());
                // 水印Y轴的开始位置
                int startIndexY = (WATERMARK_IMAGE_HEIGHT - totalHeight) / 2;
                for (int i = 0; i < watermarkMessages.size(); i++) {
    
                    String watermarkMessage = watermarkMessages.get(i);
                    int watermarkLength = getWatermarkLength(watermarkMessage, graphics2D);
                    // 水印文字的X轴位置
                    int startIndexX = (orgImageWidth - watermarkLength) / 2;
                    startIndexY = startIndexY + watermarkMessageHeight;
                    graphics2D.drawString(watermarkMessage, startIndexX, startIndexY);
    
                }
                graphics2D.dispose();
                // 开始打水印
                Graphics2D graphics = orgBufferImage.createGraphics();
                graphics.drawImage(bufferedImage, 0, orImageHeight - WATERMARK_IMAGE_HEIGHT, null);
                graphics.dispose();
                return orgBufferImage;
            }
        },
        BOTTOM_LEFT(2) {
            @Override
            public BufferedImage getWatermarkImage(String watermarkColor, ArrayList<String> watermarkMessages,
                                                   BufferedImage orgBufferImage) {
                return null;
            }
        },
        BOTTOM_RIGHT(3) {
            @Override
            public BufferedImage getWatermarkImage(String watermarkColor, ArrayList<String> watermarkMessages,
                                                   BufferedImage orgBufferImage) {
                return null;
            }
        },
        TOP_CENTER(4) {
            @Override
            public BufferedImage getWatermarkImage(String watermarkColor, ArrayList<String> watermarkMessages,
                                                   BufferedImage orgBufferImage) {
                return null;
            }
        },
        TOP_LEFT(5) {
            @Override
            public BufferedImage getWatermarkImage(String watermarkColor, ArrayList<String> watermarkMessages,
                                                   BufferedImage orgBufferImage) {
                return null;
            }
        },
        TOP_RIGHT(6) {
            @Override
            public BufferedImage getWatermarkImage(String watermarkColor, ArrayList<String> watermarkMessages,
                                                   BufferedImage orgBufferImage) {
                return null;
            }
        };
    
        PositionEnum(Integer choosePosition) {
            this.choosePosition = choosePosition;
        }
    
        private Integer choosePosition;
    
        public static PositionEnum getPositionEnum(Integer choosePosition) {
            for (PositionEnum positionEnum : PositionEnum.values()) {
                if (choosePosition == positionEnum.getChoosePosition()) {
                    return positionEnum;
                }
            }
            return null;
        }
    
    
        public Integer getChoosePosition() {
            return choosePosition;
        }
    
        public void setChoosePosition(Integer choosePosition) {
            this.choosePosition = choosePosition;
        }
    }

    使用:

    PositionEnum positionEnum = PositionEnum.getPositionEnum(1);
     positionEnum.getWatermarkImage();
  • 相关阅读:
    sublime 安装 插件 package control,安装docblockr
    常用PHP方法个人汇总
    Linux使用SVN 钩子自动同步更新网站代码
    PHP处理微信支付回调
    nodejs v4.4.5在windows下的安装
    jQuery延迟执行的方法,常用于TAB效果和各种切换效果
    textarea提示还能输入多少字
    有关git的记录
    异常的处理,异常日志的规约
    poi导入导出
  • 原文地址:https://www.cnblogs.com/dw3306/p/13215491.html
Copyright © 2020-2023  润新知