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

guy*_*guy 4 java casting

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

switch(type) {
case Float:
    (Float) obj ...
    ....
case Long:
    (Long) obj ...
    ...
case String:
    (String) obj ...
    ....
}
Run Code Online (Sandbox Code Playgroud)

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

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

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
Run Code Online (Sandbox Code Playgroud)

我得到的编译错误:

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

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

m0s*_*it0 5

使用,Class<Integer>因此编译器知道您所指的是哪个类

Class<Integer> c = java.lang.Integer.class;
Integer num2 = c.cast(myObject); // works now
Run Code Online (Sandbox Code Playgroud)

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