列挙タイプenumの使用
2337 ワード
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
戻りタイプにはクラスが必要で、パラメータにはクラスのClassが必要です.
入力されたnameは、SMALL MEDIUM LARGEなど、クラスで定義されている必要があります.