All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.sam.server.util.PrimitiveWrapper Maven / Gradle / Ivy

package org.sam.server.util;

import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Parameter;
import java.util.HashMap;
import java.util.Map;

/**
 * 원시 타입을 박스 타입으로 변환해주는 클래스입니다.
 */
public class PrimitiveWrapper {

    private static final Map> boxTypes = new HashMap<>(9);

    static {
        boxTypes.put(Boolean.TYPE.getName(), Boolean.class);
        boxTypes.put(Character.TYPE.getName(), Character.class);
        boxTypes.put(Byte.TYPE.getName(), Byte.class);
        boxTypes.put(Short.TYPE.getName(), Short.class);
        boxTypes.put(Integer.TYPE.getName(), Integer.class);
        boxTypes.put(Long.TYPE.getName(), Long.class);
        boxTypes.put(Float.TYPE.getName(), Float.class);
        boxTypes.put(Double.TYPE.getName(), Double.class);
        boxTypes.put(Void.TYPE.getName(), Void.class);
    }

    /**
     * 원시 타입의 값을 박스 타입 인스턴스로 변환합니다.
     *
     * @param type 원시 타입
     * @param value 원시 타입 값
     * @return 박스 타입 인스턴스
     * */
    public static Object wrapPrimitiveValue(Class type, String value) {
        String parameterType = type.getSimpleName();
        Class boxType = PrimitiveWrapper.getType(parameterType);
        return PrimitiveWrapper.autoBoxing(boxType, value);
    }

    /**
     * 원시 타입을 박스 타입으로 변환합니다.
     *
     * @param type 박스 타입
     * @param value 원시 타입 값
     * @return 박스 타입 인스턴스
     * */
    private static Object autoBoxing(Class type, String value) {
        Constructor[] constructors = type.getConstructors();
        for (Constructor constructor : constructors) {
            Parameter[] parameters = constructor.getParameters();
            for (Parameter parameter : parameters) {
                if (!parameter.getType().equals(String.class)) continue;
                try {
                    return constructor.newInstance(value);
                } catch (InstantiationException | IllegalAccessException | InvocationTargetException e) {
                    e.printStackTrace();
                }
            }
        }
        return null;
    }

    /**
     * 원시 타입에 해당하는 박스 타입을 반환합니다.
     *
     * @param type 원시타명
     * @return 박싱 인스턴스
     * */
    public static Class getType(String type) {
        return boxTypes.get(type);
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy