深入探讨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类型的各种情况以及如何处理,对于实际开发有很大的帮助。

原创文章,作者:WFCI,如若转载,请注明出处:https://www.506064.com/n/138576.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
WFCIWFCI
上一篇 2024-10-04 00:21
下一篇 2024-10-04 00:21

相关推荐

  • MySQL bigint与long的区别

    本文将从数据类型定义、存储空间、数据范围、计算效率、应用场景五个方面详细阐述MySQL bigint与long的区别。 一、数据类型定义 bigint在MySQL中是一种有符号的整…

    编程 2025-04-28
  • 深入解析Vue3 defineExpose

    Vue 3在开发过程中引入了新的API `defineExpose`。在以前的版本中,我们经常使用 `$attrs` 和` $listeners` 实现父组件与子组件之间的通信,但…

    编程 2025-04-25
  • 深入理解byte转int

    一、字节与比特 在讨论byte转int之前,我们需要了解字节和比特的概念。字节是计算机存储单位的一种,通常表示8个比特(bit),即1字节=8比特。比特是计算机中最小的数据单位,是…

    编程 2025-04-25
  • JavaScript中的Object.getOwnPropertyDescriptors()

    一、简介 Object.getOwnPropertyDescriptors()是JavaScript中一个非常有用的工具。简单来说,这个方法可以获取一个对象上所有自有属性的属性描述…

    编程 2025-04-25
  • 深入理解Flutter StreamBuilder

    一、什么是Flutter StreamBuilder? Flutter StreamBuilder是Flutter框架中的一个内置小部件,它可以监测数据流(Stream)中数据的变…

    编程 2025-04-25
  • 深入探讨OpenCV版本

    OpenCV是一个用于计算机视觉应用程序的开源库。它是由英特尔公司创建的,现已由Willow Garage管理。OpenCV旨在提供一个易于使用的计算机视觉和机器学习基础架构,以实…

    编程 2025-04-25
  • 深入了解scala-maven-plugin

    一、简介 Scala-maven-plugin 是一个创造和管理 Scala 项目的maven插件,它可以自动生成基本项目结构、依赖配置、Scala文件等。使用它可以使我们专注于代…

    编程 2025-04-25
  • 深入了解LaTeX的脚注(latexfootnote)

    一、基本介绍 LaTeX作为一种排版软件,具有各种各样的功能,其中脚注(footnote)是一个十分重要的功能之一。在LaTeX中,脚注是用命令latexfootnote来实现的。…

    编程 2025-04-25
  • 深入理解Python字符串r

    一、r字符串的基本概念 r字符串(raw字符串)是指在Python中,以字母r为前缀的字符串。r字符串中的反斜杠(\)不会被转义,而是被当作普通字符处理,这使得r字符串可以非常方便…

    编程 2025-04-25
  • 深入探讨冯诺依曼原理

    一、原理概述 冯诺依曼原理,又称“存储程序控制原理”,是指计算机的程序和数据都存储在同一个存储器中,并且通过一个统一的总线来传输数据。这个原理的提出,是计算机科学发展中的重大进展,…

    编程 2025-04-25

发表回复

登录后才能评论