문제

제공된 클래스 유형의 인스턴스를 반환하는 메소드가 필요합니다. 제공된 유형이 "빈"인스턴스가 생성 될 수 있도록 제한되어 있다고 가정 해 봅시다. 예를 들어 공급 String.class 빈 문자열을 반환하여 공급합니다 Integer.class 초기 값이 0 인 정수를 반환합니다. 그러나 즉시 (박스형) 원시 유형을 즉시 생성하려면 어떻게해야합니까? 이와 같이?

public Object newInstance(Class<?> type) {
    if (!type.isPrimitive()) {
        return type.newInstance(); // plus appropriate exception handling
    } else {
        // Now what?
        if (type.equals(Integer.class) || type.equals(int.class)) {
            return new Integer(0);
        }
        if (type.equals(Long.class) // etc.... 
    }
}

가능한 모든 원시 유형을 반복 할 수있는 유일한 해결책입니까, 아니면보다 간단한 솔루션이 있습니까? 둘 다에 유의하십시오

int.class.newInstance()

그리고

Integer.class.newInstance()

던져 InstantiationException (무기력 생성자가 없기 때문에).

도움이 되었습니까?

해결책

가장 간단한 방법은지도를 갖는 것입니다.

private final static Map<Class<?>, Object> defaultValues = 
    new HashMap<Class<?>, Object>();
static
{
    defaultValues.put(String.class, "");
    defaultValues.put(Integer.class, 0);
    defaultValues.put(int.class, 0);
    defaultValues.put(Long.class, 0L);
    defaultValues.put(long.class, 0L);
    defaultValues.put(Character.class, '\0');
    defaultValues.put(char.class, '\0');
    // etc
}

다행스럽게도 이러한 모든 유형은 불변이기 때문에 동일한 유형의 각 호출에서 동일한 개체에 대한 참조를 반환해도됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top