Java枚举的七种常见用法

1、用法一:常量

  在JDK1.5之前,我们定义常量都是:publicstaticfianl....。现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法。

  Java代码

public enum Color {

  RED, GREEN, BLANK, YELLOW

}

2、用法二:switch

  JDK1.6之前的switch语句只支持int,char,enum类型,使用枚举,能让我们的代码可读性更强。

  Java代码

enum Signal {

      GREEN, YELLOW, RED

}

public class TrafficLight {

      Signal color = Signal.RED;

      public void change() {

      switch (color) {

  case RED:

      color = Signal.GREEN;

      break;

  case YELLOW:

      color = Signal.RED;

      break;

   case GREEN:

        color = Signal.YELLOW;

        break;

          }

      }

  }

3、用法三:向枚举中添加新方法

  如果打算自定义自己的方法,那么必须在enum实例序列的最后添加一个分号。而且Java要求必须先定义enum实例。

public enum Color {

  RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);

  // 成员变量

  private String name;

  private int index;

  // 构造方法

  private Color(String name, int index) {

      this.name = name;

      this.index = index;
    
  }

  // 普通方法

  public static String getName(int index) {

      for (Color c : Color.values()) {

          if (c.getIndex() == index) {

              return c.name;

          }

      }

      return null;

  }

  // get set 方法

  public String getName() {

      return name;

  }

  public void setName(String name) {

      this.name = name;

  }

  public int getIndex() {

      return index;

  }

  public void setIndex(int index) {

      this.index = index;

  }

}
        

4、用法四:覆盖枚举的方法

  下面给出一个toString()方法覆盖的例子。 

public enum Color {
    RED("红色"), GREEN("绿色"), BLANK("白色"), YELLO("黄色");
    // 成员变量
    private String name;

    // 构造方法
    private Color(String name) {
        this.name = name;
    }

    // 覆盖方法
    @Override
    public String toString() {
        return this.name;
    }
}

5、用法五:实现接口
  所有的枚举都继承自java.lang.Enum类。由于Java不支持多继承,所以枚举对象不能再继承其他类。

  Java代码

public interface Behaviour {

  void print();

  String getInfo();

}

public enum Color implements Behaviour{

  RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);

  // 成员变量

  private String name;

  private int index;

  // 构造方法

  private Color(String name, int index) {

  this.name = name;

  this.index = index;

  }

  //接口方法

  @Override

  public String getInfo() {

      return this.name;

  }

  //接口方法

  @Override

  public void print() {

      System.out.println(this.index+":"+this.name);

  }

}

6、用法六:使用接口组织枚举

  Java代码

 public interface Food {

  enum Coffee implements Food{

  BLACK_COFFEE,DECAF_COFFEE,LATTE,CAPPUCCINO

  }

  enum Dessert implements Food{

  FRUIT, CAKE, GELATO

  }

  }

7、用法七:关于枚举集合的使用
  java.util.EnumSet和java.util.EnumMap是两个枚举集合。EnumSet保证集合中的元素不重复;EnumMap中的key是enum类型,而value则可以是任意类型。

8、实践

package com.ylink.cms.pojo.lucene;

import java.util.Date;

public class LuceneContent {

    private String id;

    private String channelId;

    private String title;

    public enum LuceneContentType {
        article, channel
    }

    private LuceneContentType type;

    private String remark;

    private String content;

    private Date createDate;

    private String author;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getChannelId() {
        return channelId;
    }

    public void setChannelId(String channelId) {
        this.channelId = channelId;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }

    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

    public LuceneContentType getType() {
        return type;
    }

    public void setType(LuceneContentType type) {
        this.type = type;
    }

    public Date getCreateDate() {
        return createDate;
    }

    public void setCreateDate(Date createDate) {
        this.createDate = createDate;
    }

    public String getRemark() {
        return remark;
    }

    public void setRemark(String remark) {
        this.remark = remark;
    }

    @Override
    public String toString() {
        return "LuceneContent [id=" + id + ", channelId=" + channelId
                + ", title=" + title + ", type=" + type + ", remark=" + remark
                + ", content=" + content + ", createDate=" + createDate
                + ", author=" + author + "]";
    }

}
package com.ylink.cms.util;

import java.util.ArrayList;
import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.ylink.cms.pojo.channel.Channel;
import com.ylink.cms.pojo.content.Content;
import com.ylink.cms.pojo.lucene.LuceneContent;
import com.ylink.cms.pojo.lucene.LuceneContent.LuceneContentType;

public class LuceneContentTransUtil {
    private static final Logger logger = LoggerFactory.getLogger(LuceneContentTransUtil.class);
    /**将栏目转化可索引内容*/
    public static LuceneContent parseContent(Content content){
        LuceneContent luceneContent = new LuceneContent();
        luceneContent.setAuthor(content.getAuthor());
        luceneContent.setChannelId(String.valueOf(content.getChannelId()));
        luceneContent.setContent(content.getContentDetail());
        luceneContent.setCreateDate(content.getCrtdate());
        luceneContent.setId(String.valueOf(content.getContentId()));
        luceneContent.setRemark(content.getRemark());
        luceneContent.setTitle(content.getContentTitle());
        luceneContent.setType(LuceneContentType.article);
        return luceneContent;
    }
    /**内容可索引化*/
    public static LuceneContent praseChannel(Channel channel){
        LuceneContent luceneContent = new LuceneContent();
        luceneContent.setAuthor("");
        luceneContent.setChannelId(String.valueOf(channel.getChannelId()));
        luceneContent.setContent(channel.getChannelIntro());
        luceneContent.setCreateDate(channel.getCrtdate());
        luceneContent.setId(String.valueOf(channel.getChannelId()));
        luceneContent.setRemark(channel.getChannelIntro());
        luceneContent.setTitle(channel.getChannelName());
        luceneContent.setType(LuceneContentType.channel);
        return luceneContent;
    }
    
    public static List<LuceneContent> praseChannelsOrContents(List<Channel> channels, List<Content> contents){
        
        List<LuceneContent> luceneContents = new ArrayList<LuceneContent>();
        /**将栏目转化可索引内容*/
        if(null != channels && channels.size()>=1){
            
            for(int i =0; i< channels.size(); i++){
                
                LuceneContent lc = praseChannel(channels.get(i));
                luceneContents.add(lc);
            }
        }
        /**内容可索引化*/
        if(null != contents && contents.size()>=1){
            
            for(int i =0; i< contents.size(); i++){
                
                LuceneContent lc = parseContent(contents.get(i));
                luceneContents.add(lc);
            }
        }
        logger.info("luceneContents.size(): "+luceneContents.size());
        return luceneContents;
    }
    
}
原文地址:https://www.cnblogs.com/rookie-newbie/p/7918591.html