您的位置:

深入探讨object转long

一、object转longer

在一些业务场景下,可能需要将object类型转换为longer类型。object类型是所有数据类型的基类,也就是说它可以表示任何数据类型。longer类型是long的包装类,其可以表示比long类型更大的数值范围。下面来看一下如何将object转换为longer。

public static Long objectToLonger(Object obj) {
    if (obj == null) {
        return null;
    }
    if (obj instanceof Long) {
        return (Long) obj;
    }
    if (obj instanceof Integer) {
        return ((Integer) obj).longValue();
    }
    if (obj instanceof String) {
        try {
            return Long.valueOf((String) obj);
        } catch (NumberFormatException e) {
            return null;
        }
    }
    throw new IllegalArgumentException("can not convert " + obj.getClass().getName() + " to Long");
}

上述代码实现了将object类型转换为longer类型的方法,包括了对于null、Long、Integer、String等类型的处理。其中,如果object为null,返回null;如果object是Long或Integer类型,则直接将其转为Long类型返回;如果object是String类型,可以通过Long.valueOf()将其转为Long类型,但是如果转换失败,返回null;否则抛出IllegalArgumentException异常。

二、object强转list

在一些场景下,可能需要将object类型强制转换为List类型。下面来看一下如何实现这一过程。

@SuppressWarnings("unchecked")
public static <T> List<T> objectToList(Object obj) {
    if (obj == null) {
        return null;
    }
    if (!(obj instanceof List)) {
        throw new IllegalArgumentException("can not convert " + obj.getClass().getName() + " to List");
    }
    return (List<T>) obj;
}

上述代码实现了将object类型强制转换为List类型的方法,如果object为null,则返回null;如果object不是List类型,则抛出IllegalArgumentException异常;否则将其强制转换为List类型并返回。

三、object转long问题

在将object类型转换为long类型时,可能会遇到一些问题,下面一一说明。

1、object转map

@SuppressWarnings("unchecked")
public static <K, V> Map<K, V> objectToMap(Object obj) {
    if (obj == null) {
        return null;
    }
    if (!(obj instanceof Map)) {
        throw new IllegalArgumentException("can not convert " + obj.getClass().getName() + " to Map");
    }
    return (Map<K, V>) obj;
}

上述代码实现了将object类型转换为Map类型的方法,如果object为null,则返回null;如果object不是Map类型,则抛出IllegalArgumentException异常;否则将其强制转换为Map类型并返回。

2、object转long类型

public static Long objectToLong(Object obj) {
    if (obj == null) {
        return null;
    }
    if (obj instanceof Long) {
        return (Long) obj;
    }
    if (obj instanceof String) {
        try {
            return Long.valueOf((String) obj);
        } catch (NumberFormatException e) {
            return null;
        }
    }
    throw new IllegalArgumentException("can not convert " + obj.getClass().getName() + " to Long");
}

上述代码已在第一部分做了详细的介绍,这里不再赘述。

3、object转bean

public static <T> T objectToBean(Object obj, Class<T> clazz) {
    if (obj == null) {
        return null;
    }
    if (clazz == null) {
        throw new IllegalArgumentException("clazz can not be null");
    }
    if (!(obj instanceof Map)) {
        throw new IllegalArgumentException("can not convert " + obj.getClass().getName() + " to " + clazz.getName());
    }
    try {
        T result = clazz.newInstance();
        BeanUtils.populate(result, (Map<? extends String, ?>) obj);
        return result;
    } catch (InstantiationException e) {
        throw new RuntimeException("can not instance class: " + clazz.getName(), e);
    } catch (IllegalAccessException e) {
        throw new RuntimeException("can not access the constructor of class: " + clazz.getName(), e);
    } catch (InvocationTargetException e) {
        throw new RuntimeException("can not set property of class: " + clazz.getName(), e);
    }
}

上述代码实现了将object类型转换为指定类型的Bean对象,如果obj为null,则返回null;如果clazz为null,则抛出IllegalArgumentException异常;如果obj不是Map类型,则抛出IllegalArgumentException异常;否则通过BeanUtils.populate()方法将obj赋值给clazz的实例并返回。

四、object转long可能为null

在实际开发中,经常会遇到需要将object类型转换为long类型,但是存在object为null的情况,下面展示如何处理这一情况。

public static long objectToLongWithDefault(Object obj, long defaultValue) {
    Long l = objectToLong(obj);
    return l == null ? defaultValue : l.longValue();
}

上述代码实现了将object类型转换为long类型的方法,并且当object为null时,返回给定的默认值defaultValue。

五、object转成list

在一些场景下,需要将object类型转换为list类型,下面展示如何实现。

@SuppressWarnings("unchecked")
public static <T> List<T> objectToList(Object obj, Class<T> clazz) {
    if (obj == null) {
        return null;
    }
    if (!(obj instanceof List)) {
        throw new IllegalArgumentException("can not convert " + obj.getClass().getName() + " to List");
    }
    List<T> result = new ArrayList<T>();
    List list = (List) obj;
    for (Object o : list) {
        result.add((T) o);
    }
    return result;
}

上述代码实现了将object类型转换为List类型,并将List中的元素强制转换为给定的类型clazz。

六、小结

本文从多个方面详细阐述了object类型转换为long类型的各种情况以及如何处理,对于实际开发有很大的帮助。