列挙タイプenumの使用



privateのコンストラクタがあり、constant定義は最初に行う必要があります.
 
package com.enums;

public enum Size
{
	// 
	SMALL("S"), MEDIUM("M"),LARGE("L");
	
	private String abbrev;
	public String getAbbrev(){
		return this.abbrev;
	}
	private Size(String abbrev){
		this.abbrev = abbrev;
	}
	
	public static void main(String[] args){
		for(Size s: Size.values()){
			System.out.println(s + "\t" + s.getAbbrev() + "\t" + s.toString());
		}
		
		System.out.println(Size.SMALL);
//		System.out.println(Size.valueOf("S"));
		System.out.println(Size.valueOf("SMALL"));
		System.out.println(Size.valueOf(Size.class, "SMALL"));
	}
}

 
ソースコード
    /**
     * Returns the enum constant of the specified enum type with the
     * specified name.  The name must match exactly an identifier used
     * to declare an enum constant in this type.  (Extraneous whitespace
     * characters are not permitted.) 
     *
     * @param enumType the <tt>Class</tt> object of the enum type from which
     *      to return a constant
     * @param name the name of the constant to return
     * @return the enum constant of the specified enum type with the
     *      specified name
     * @throws IllegalArgumentException if the specified enum type has
     *         no constant with the specified name, or the specified
     *         class object does not represent an enum type
     * @throws NullPointerException if <tt>enumType</tt> or <tt>name</tt>
     *         is null
     * @since 1.5
     */
    public static <T extends Enum<T>> T valueOf(Class<T> enumType,
                                                String name) {
        T result = enumType.enumConstantDirectory().get(name);
        if (result != null)
            return result;
        if (name == null)
            throw new NullPointerException("Name is null");
        throw new IllegalArgumentException(
            "No enum const " + enumType +"." + name);
    }

ここでのvalueOfの最初のパラメータはクラスであり、各クラスはClassのオブジェクトであるため、Classと書き、ここではSizeを用いることができる.class
戻りタイプにはクラスが必要で、パラメータにはクラスのClassが必要です.
入力されたnameは、SMALL MEDIUM LARGEなど、クラスで定義されている必要があります.