LoginSignup
3
3

More than 5 years have passed since last update.

javaの列挙型 enum

Last updated at Posted at 2016-03-16

javaの列挙型 enum

C言語のポインタ配列に疑似するjavaの窮苦。。

Functions.java
package method.call;

import java.util.HashMap;
import java.util.Map;

import method.call.Jumper.__EnumFunc__;

public class Functions {
    // Entry 01
    public void method_func_01(Map<String, String> par) {
        System.out.printf("\t<result>01 done.</result>%n\t<arguments>%s</arguments>%n", par);
    }

    public Map<String, String> parameters_func_01(__EnumFunc__ e) {
        return safetyMap(e.getParameter());
    }

    // Entry 02
    public void method_func_02(ParameterFunction02 par) {
        System.out.printf("\t<result>02 done.</result>%n\t<arguments>%s</arguments>%n", par);
    }

    public ParameterFunction02 parameters_func_02(__EnumFunc__ e) {
        Object p = e.getParameter();
        return (p instanceof ParameterFunction02) ? (ParameterFunction02)p : new ParameterFunction02();
    }

    // Entry 03
    public void method_func_03(Map<String, String> par) {
        System.out.printf("\t<result>03 done.</result>%n\t<arguments>%s</arguments>%n", par);
    }

    public Map<String, String> parameters_func_03(__EnumFunc__ e) {
        return safetyMap(e.getParameter());
    }

    static <K, V> Map<K, V> safetyMap(Object objectMap) {
        if (objectMap == null) {
            return null;
        }

        @SuppressWarnings("unchecked")
        Map<K, V> map = (Map<K, V>) (objectMap);

        return new HashMap<K, V>(map);
    }
}

ParameterFunction02.java
package method.call;

import java.util.HashMap;
import java.util.Map;

public class ParameterFunction02 {
    String s1;
    String s2;
    Map<String, Object> o1 = new HashMap<String, Object>();

    public String toString() {
        StringBuffer work = new StringBuffer(128);
        work.append("s1=").append("[").append(s1).append("],");
        work.append("s2=").append("[").append(s2).append("],");
        work.append("o1=").append("[").append(o1).append("]");

        return work.toString();
    }
}

Jumper.java
package method.call;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.TreeMap;

public class Jumper extends Functions {

    public static void main(String[] args) throws Exception {
        Jumper j = new Jumper();
        j.mainEntry();
    }


    public void mainEntry() throws Exception {
        List<__EnumFunc__> listFunc = new ArrayList<__EnumFunc__>();

        Map<String, Object> info = buildRunData();

        for (Iterator<Entry<String, Object>> it = info.entrySet().iterator(); it.hasNext();) {
            setEntryData(listFunc, it.next());
        }

        System.out.println();

        for (__EnumFunc__ entry : listFunc) {
            System.out.printf("<%s parameter=\"%s\">%n", entry.strLabel, entry.getParameter());
            entry.call(this, entry);
            System.out.printf("</%s>%n%n", entry.strLabel);
        }
    }

    private Map<String, Object> buildRunData() {
        Map<String, Object> info = new TreeMap<String, Object>();

        info.put("__Entry_01__", new HashMap<String, Object>(2){
            private static final long serialVersionUID = 1L;
            {
                put("pkey1", 123456);
                put("pkey2", "abcd");
            } 
        });
        info.put("__Entry_02__", new ParameterFunction02() {
            {
                this.s1 = "A01";
                this.s2 = "B99";
                this.o1.put("key3", 654321);
                this.o1.put("key4", "dcba");
            }
        });
        info.put("__Entry_03__", new HashMap<String, Object>(3){
            private static final long serialVersionUID = 1L;
            {
                put("pkey1", 123456);
                put("pkey2", "abcd");
                put("pkey3", 2);
            } 
        });

        return info;
    }

    private __EnumFunc__ setEntryData(List<__EnumFunc__> list, Entry<String, Object> e) {
        String key = e.getKey();

        __EnumFunc__ eFunc = __EnumFunc__.safeValueOf(key); 

        if (eFunc.intValue >= 0) {
            System.out.printf("[setEntryData]key:%s, parameter = (%s)%n", key, e.getValue());
            eFunc.putParameter(e.getValue());
            list.add( eFunc ); 
        }

        return eFunc;
    }

    private static final String __NoEntry__ = "NoFunction";
    private static final String __Lable01__ = "Function01";
    private static final String __Lable02__ = "Function02";
    private static final String __Lable03__ = "Function03";

    enum __EnumFunc__ {
          __Entry_01__ ( 1, __Lable01__) { void call(Jumper me, method.call.Jumper.__EnumFunc__ e) throws Exception {me.method_func_01 (me.parameters_func_01 (e)); } }
        , __Entry_02__ ( 2, __Lable02__) { void call(Jumper me, method.call.Jumper.__EnumFunc__ e) throws Exception {me.method_func_02 (me.parameters_func_02 (e)); } }
        , __Entry_03__ ( 3, __Lable03__) { void call(Jumper me, method.call.Jumper.__EnumFunc__ e) throws Exception {me.method_func_03 (me.parameters_func_03 (e)); } }
        , __Excluded__ (-1, __NoEntry__)
        ;

        private int intValue;
        private String strLabel;

        private Object parameter;

        private __EnumFunc__(int n, String s) {
            this.intValue = n;
            this.strLabel = s;
        }

        void putParameter(Object v) {
            this.parameter = v;
        }

        int getValue() {
            return this.intValue;
        }

        String getLabel() {
            return this.strLabel;
        }

        Object getParameter() {
            return this.parameter;
        }

        static __EnumFunc__ safeValueOf(final String s) {
            __EnumFunc__ funcJumper = __Excluded__;

            try {
                funcJumper = method.call.Jumper.__EnumFunc__.valueOf(s);
            } catch (Exception e) {
            }

            return funcJumper;
        }

        void call(Jumper me, method.call.Jumper.__EnumFunc__ e) throws Exception {
            return;
        }
    }
}

実行結果:


[setEntryData]key:Entry_01, parameter = ({pkey2=abcd, pkey1=123456})
[setEntryData]key:Entry_02, parameter = (s1=[A01],s2=[B99],o1=[{key4=dcba, key3=654321}])
[setEntryData]key:Entry_03, parameter = ({pkey3=2, pkey2=abcd, pkey1=123456})

<Function01 parameter="{pkey2=abcd, pkey1=123456}">
    <result>01 done.</result>
    <arguments>{pkey2=abcd, pkey1=123456}</arguments>
</Function01>

<Function02 parameter="s1=[A01],s2=[B99],o1=[{key4=dcba, key3=654321}]">
    <result>02 done.</result>
    <arguments>s1=[A01],s2=[B99],o1=[{key4=dcba, key3=654321}]</arguments>
</Function02>

<Function03 parameter="{pkey3=2, pkey2=abcd, pkey1=123456}">
    <result>03 done.</result>
    <arguments>{pkey3=2, pkey2=abcd, pkey1=123456}</arguments>
</Function03>
3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3