【问题标题】:Cast an Object To Long in Java在 Java 中将对象强制转换为 Long
【发布时间】:2016-06-30 07:09:07
【问题描述】:

我正在尝试在 Java 中将 Object 类型转换为 Long 类型,结果如下:

public static Long castObjectToLong(Object object) {
    return ((Long)object).longValue();

当我运行时,它会抛出 ClassCastException

【问题讨论】:

  • Object 转换为Long 有何期望?
  • public static long castObjectToLong( ... 怎么样
  • 您的方法中缺少返回类型!
  • it does not work well是什么意思?
  • 编辑后:请更具体地说明您对“效果不佳”的看法?它会抛出异常吗?你没有得到你期望的值吗?

标签: java object casting long-integer


【解决方案1】:

当你写 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;
        
    }

}

我先将 Object 转换为 String。然后将 String 转换为 Long。请查看此代码是否可以用于您。

【讨论】:

    【解决方案2】:

    您得到了ClassCastException,因为您可能正试图将java.lang.Integer 转换为java.lang.Long,而这无法直接完成。

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

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

    【讨论】:

    【解决方案3】:

    你可以这样试试:

     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;
      【解决方案5】:

      我喜欢使用BigDecimal。简单且无错误。即使您的对象包含小数,它也会处理它。

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

      【讨论】:

        【解决方案6】:

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

        【讨论】:

          【解决方案7】:

          这是因为您返回的是 long 值而不是 Long.longValue() 方法,您使用的方法只会给出 long 值,但您不想要原始数据类型值,而是想要 Long 所以简单地转换它就可以了!! 即return (Long)object 而不是((Long)object).longValue();

          【讨论】:

            【解决方案8】:

            在您的代码中,ClassCastException 被抛出,因为 Object 不是 Long。 如果您的对象为空,也有可能遇到 NullPointerException

            因此,最好的解决方案是对您的对象进行空检查,然后使用 String.valueOftoString() 将其转换为字符串,然后解析它到龙。

            String.valueOf(object)object.toString() 之间的区别在这里并不重要,因为前者在对象为 null 时返回 null 其中后者抛出 NullpointerException

            【讨论】:

              猜你喜欢
              • 2011-09-26
              • 2012-05-31
              • 2022-06-10
              • 1970-01-01
              • 2012-05-30
              • 1970-01-01
              • 2013-01-22
              • 2014-01-16
              • 1970-01-01
              相关资源
              最近更新 更多