【问题标题】:Long and Integer class castLong 和 Integer 类强制转换
【发布时间】:2019-01-25 22:26:39
【问题描述】:

我有一个简单的问题。我已经知道在 Java 中你不能这样做:

Long.class.cast(and Integer here)

但我只是好奇为什么?相反,你可以很容易地进入溢出,但这样我就找不到任何可能发生的坏事。 谁能告诉我以这种方式使用铸造有什么问题?

编辑->

所以我想要做的。我已经写了一个转换器,它将我从我提供的输入(它是一个地图)转换为我的模型。我想为我指定的每个模型编写 1 个转换器。目前,它适用于其中的对象(例如我提供的其他模型)、字符串和相同类型(例如,我有一个整数,我提供了一个整数)。我正在尝试做的是,我想“更新”我的转换器以在以下情况下工作:在我的模型中,我有一个 Long 类型的字段,并且我提供了 Integer。所以我希望它将 Integer 转换为 Long,但是,我不想只为这种情况做 if(因为在这种情况下,例如从 Short 转换为 Long 将是另一种 if)。有可能吗?

【问题讨论】:

  • Integer integer = 1; System.out.println(Long.class.cast(integer)); 它抛出异常,我只是想知道为什么
  • 它只是以不同的方式完成:Long l = new Long(10i);
  • @HovercraftFullOfEels Class#cast(Object)).
  • @Dukeling:谢谢你
  • @Ajris 你想做什么?基于your comment,您似乎正在尝试做其他事情。这被称为“XY 问题”,因此您可能想写一些关于“X”问题的内容。

标签: java casting int long-integer


【解决方案1】:

因为Object.cast(Object obj) 不仅仅用于数字。它用于类型转换。

ClassCastException 如果对象不为 null 且不可分配给 Long 类型,则将被抛出。

你可以用这个:

Integer integer = 1;

Long l = integer.longValue();

或者您可以在LongInteger 上致电longValue,然后使用Long.class.cast

Integer integer = 1;
Long longType = 1L;

Long l = Long.class.cast(longType.longValue());
l = Long.class.cast(integer.longValue());

【讨论】:

  • 是的,但是当我使用反射并且我不想使用 ifs 将整数转换为 long 时,是否可以用另一种方式做到这一点?
  • (long) yourInt 也许.. Ex: (long) 2
  • 我不想使用 ifs,例如,如果我使用强制转换,它可以将我的一些类转换为另一个类。如果我提供整数,它不会因为这个异常而将它转换为 long。而且我不想每次都检查我是否提供了整数或其他类型,只想有一个也适用于 Integer 和 Long 的解决方案。有可能吗?
  • @Ajris int 值可以分配给 long 变量而无需(显式)强制转换。使用原语可能会更好,除非您特别需要使用类(或者您的输入是Object)。
  • @Ajris 每个Number 子类(LongIntegerShortByte 等)都有一个longValue 方法——你不应该需要一个 if-专门针对Integer 的声明。
猜你喜欢
  • 1970-01-01
  • 2012-01-12
  • 2021-01-24
  • 2012-04-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多