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;
    }
    
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM