在Java中将对象转换为长整型

15

我正试图在Java中将一个Object类型转换为Long类型,我得到了如下结果:

public static Long castObjectToLong(Object object) {
    return ((Long)object).longValue();
当我运行时,它会抛出ClassCastException。

1
Object强制转换为Long,你期望得到什么? - Frank Puffer
1
public static long castObjectToLong( ... 怎么样? - Fildor
1
你的方法缺少返回类型! - Unknown
1
编辑后:请更具体地描述您对“不工作良好”的看法?它是否抛出异常?您是否得到了预期的值? - Fildor
1
强制类型转换并不会改变对象的类,它只是告诉编译器你想将其转换为的类。如果你试图将一个对象强制转换为Long,但该对象本身不是Long类型,那么就会抛出ClassCastException异常。 - Thomas Stets
显示剩余4条评论
9个回答

35

当您编写 return ((Long)object).longValue(); 时,会导致 ClassCastException,因为 Object 不是 Long。我的意思是如果 Object o = new Long(),则可以进行转换((Long)object)。我所写的示例就像这样:

public class Test {

    public static void main(String args[]){
        System.out.println(convertToLong(10));
    }
    
    public static Long convertToLong(Object o){
        String stringToConvert = String.valueOf(o);
        Long convertedLong = Long.parseLong(stringToConvert);
        return convertedLong;
        
    }

}

我先将对象转换为字符串,然后将字符串转换为长整型。请看这段代码是否适合您使用。


7

你遇到了ClassCastException,可能是因为你试图将java.lang.Integer直接转换为java.lang.Long而导致的。

尝试将对象转换为字符串,然后将其作为参数传递给Long的构造函数。

public static Long castObjectToLong(Object object) {
   return new Long(object.toString());
}

很少使用该构造函数是恰当的。 https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Long.html - 2787184
3
自Java 9+起,长构造函数已被弃用。请改用Long.valueOf(object.toString())代替。 - E Ciotti

6
你可以尝试像这样做:

你可以尝试像这样做:

 public class HelloWorld{
public static Long castObjectToLong(Object object) {
  return Long.parseLong(object.toString());
       }
    public static void main(String []args){
       System.out.println("Hello World");
       Object object=1234;
        System.out.println(castObjectToLong(object));
    }
}

4
以下代码可能会有所帮助:
public class CastObjectToLong {
    public Long castLongObject(Object object) {
        Long result = 0l;
        try {
            if (object instanceof Long)
                result = ((Long) object).longValue();
            else if (object instanceof Integer) {
                result = ((Integer) object).longValue();
            } else if (object instanceof String) {
                result = Long.valueOf((String) object);
            }
            System.out.println(result);
        } catch (Exception e) {
            System.out.println("============= cannot cast");
            // do something
        }
        return result;
    }

    public static void main(String... args) {
        CastObjectToLong castObjectToLong = new CastObjectToLong();
        Object object1 = 12; // Integer
        Object object2 = "12"; // String
        Object object3 = 12l; // String
        Object object4 = "abc"; // String

        castObjectToLong.castLongObject(object1);
        castObjectToLong.castLongObject(object2);
        castObjectToLong.castLongObject(object3);
        castObjectToLong.castLongObject(object4); // exception here
    }

}

输出:

12

12

12

============= 无法转换类型


我喜欢这个答案。我不明白为什么人们会给使用过多字符串操作的答案点赞。这太荒谬和低效了。顺便说一句,在这里可以将result = ((Long) object).longValue()简化为result = (Long) object; - Mikolasan

1
在您的代码中,抛出了ClassCastException异常,因为Object不是Long类型。如果对象为空,则有可能遇到NullPointerException。
因此,最好的解决方案是对对象进行空检查,然后使用String.valueOf或toString()将其转换为字符串,然后将其解析为Long类型。
在这里,String.valueOf(object)和object.toString()之间的区别并不重要,因为前者在对象为空时返回null,而后者会抛出NullpointerException异常。

0

Long.parseLong((String.valueOf(object)))


0
这是因为你返回了long值而不是Long.longValue()方法。你使用的方法只会给出long值,但你不想要原始数据类型的值,而是想要Long,所以简单地进行强制转换即可解决问题! 即return (Long)object而不是((Long)object).longValue();


0

将对象转换为长整型的最简单方法是:

public class Test {

    public static void main(String[] args) {
        Object a=15;
        
        System.out.println(Long.parseLong(a.toString()));
    }
}

输出:15


0

我喜欢使用BigDecimal。它简单而且不易出错。即使你的对象包含小数,它也能处理。

long l = new BigDecimal(String.valueOf(object).setScale(0).longValue());

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接