当前位置: 代码迷 >> java >> 如何通过名称将对象强制转换为类
  详细解决方案

如何通过名称将对象强制转换为类

热度:24   发布时间:2023-08-02 11:05:55.0

我有一个实际上是String Long或Integer的Object。 我想将它转换为正确的类,我通过参数知道,然后比较值。 现在我正在做:

switch(type) {
case Float:
    (Float) obj ...
    ....
case Long:
    (Long) obj ...
    ...
case String:
    (String) obj ...
    ....
}

在每种情况下,除了将一些对象转换为所选的特定类之外,其余代码都是相同的。

我想知道是否有更好的方法,所以我尝试了以下方法:

Integer myInteger = 100;
Object myObject = myInteger;

Class c = java.lang.Integer.class;  
Integer num1 = java.lang.Integer.class.cast(myObject); // works
Integer num2 = c.cast(myObject); // doesn't compile
Integer num3 = (java.lang.Integer) myObject; // works

我得到的编译错误:

错误:不兼容的类型:对象无法转换为Integer

我想知道它为什么会发生,也是我的代码重复的解决方案

使用Class<Integer>以便编译器知道您所指的是哪个类

Class<Integer> c = java.lang.Integer.class;
Integer num2 = c.cast(myObject); // works now

另外,强烈建议不要使用这种不安全的铸件。 如果您可以将逻辑更改为不需要传递Object和转换(例如泛型),那么它会更好。 如果没有,我建议至少在使用instanceof进行转换之前确保Object属于该类型(如所示)。

使用instanceof运算符:

if (obj instanceof Float) {
    Float cast = (Float) obj;
} else if (obj instanceof String) {
    String cast = (String) obj;
} else if ..

这将使你的代码工作,但如果我是你,我会考虑一些重构,因为这打破了

  相关解决方案