Java プログラムメモ


トップ

Type Safe Enumeration なクラスの作り方

Java の言語使用では列挙型がサポートされていません。(1.4 まで) そこで、列挙型を表すクラスの作り方を紹介します。かなり便利です。
Type Safe Enumeration を使う一番のメリットはメソッドを継承したり利用できる所です。
詳しくは Effective Java で紹介されています。

※ Java5.0 より Enum を使用可能になりました。

ソース記述例

import java.io.*; import java.util.*; public abstract class FileTypeEnum implements Serializable { private String value; private String name; private static Map all; private static final long serialVersionUID = 0L; public static final FileTypeEnum TEXT = new FileTypeEnum("text", "テキスト") { public String getSuffix() { return ".txt"; } }; public static final FileTypeEnum HTML = new FileTypeEnum("html", "HTML") { public String getSuffix() { return ".html"; } }; public static final FileTypeEnum PDF = new FileTypeEnum("pdf", "PDF") { public String getSuffix() { return ".pdf"; } }; private static final FileTypeEnum[] ALL = new FileTypeEnum[]{TEXT, HTML, PDF}; static { all = new HashMap(); for (int i = 0; i < ALL.length; i++) { all.put(ALL[i].getValue(), ALL[i]); } } public static FileTypeEnum valueOf(String value) { FileTypeEnum ret = (FileTypeEnum)all.get(value); if (ret == null) { throw new IllegalArgumentException("For input argument [" + value + "]"); } return ret; } public static FileTypeEnum[] getAllType() { return ALL; } public abstract String getSuffix(); public String getValue() { return value; } public String getName() { return name; } public String toString() { return new StringBuffer().append("[").append(value).append(":") .append(name).append(":").toString(); } Object readResolve() throws ObjectStreamException { return all.get(value); } private FileTypeEnum(String value, String name) { this.value = value; this.name = name; } }


プログラムメモ アフリカ雑貨・珈琲豆・アールブリュット作品 マゴソスクール クラウドファンディング
SEO [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送