Enum values() and valueOf() Methods

In this chapter you will learn:

  1. How to use use values() and valueOf() from enum
  2. Overriding toString() to return a Token constant's value
  3. Assign a different behavior to each constant

Use values() and valueOf()

All enumerations automatically contain two predefined methods: values() and valueOf(). Their general forms are:

public static enum-type[ ] values() 
public static enum-type valueOf(String str)

The values() method returns an array that contains a list of the enumeration constants. The valueOf() method returns the enumeration constant whose value corresponds to the string passed in str. In both cases, enum-type is the type of the enumeration.

The following program demonstrates the values() and valueOf() methods:

enum Direction {//  j  a  v a 2  s .  c o m
  East, South, West, North
}

public class Main {
  public static void main(String args[]) {
    Direction dir;
    // use values()
    Direction all[] = Direction.values();
    for (Direction a : all)
      System.out.println(a);
    System.out.println();
    // use valueOf()
    dir = Direction.valueOf("South");
    System.out.println(dir);
  }
}

Overriding toString() to return a Token constant's value

enum Token {//jav a 2 s . c  o m
  IDENTIFIER("ID"), INTEGER("INT"), LPAREN("("), RPAREN(")"), COMMA(",");
  private final String tokValue;

  Token(String tokValue) {
    this.tokValue = tokValue;
  }

  @Override
  public String toString() {
    return tokValue;
  }

}
public class Main{
  public static void main(String[] args) {
    for (int i = 0; i < Token.values().length; i++){
      System.out.println(Token.values()[i].name() + " = " + Token.values()[i]);      
    }

  }

}

Assign a different behavior to each constant

We can assign different value for each constant in an enum.

enum Converter {/*from  j ava 2 s  .c  om*/
  DollarToEuro("Dollar to Euro") {
    @Override
    double convert(double value) {
      return value * 0.9;
    }
  },
  DollarToPound("Dollar to Pound") {
    @Override
    double convert(double value) {
      return value * .8;
    }
  };
  Converter(String desc) {
    this.desc = desc;
  }

  private String desc;

  @Override
  public String toString() {
    return desc;
  }

  abstract double convert(double value);

}
public class Main{
  public static void main(String[] args) {
    System.out.println(Converter.DollarToEuro + " = " + Converter.DollarToEuro.convert(100.0));
    System.out.println(Converter.DollarToPound + " = " + Converter.DollarToPound.convert(98.6));
  }

}

Next chapter...

What you will learn in the next chapter:

  1. How to use enum as Class
  2. enum type Inheriting Enum