我有一个实际上是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
我想知道它为什么会发生,也是我的代码重复的解决方案
使用,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的回答所示).
归档时间: |
|
查看次数: |
81 次 |
最近记录: |