Java:如何将变量从一种类型动态转换为另一种类型?
我想对Java变量进行动态转换,转换类型存储在其他变量中。
这是常规转换:
String a = (String) 5;
这就是我要的:
String theType = 'String';
String a = (theType) 5;
这有可能吗?谢谢!
更新资料
我正在尝试使用HashMap收到的A 填充类。
这是构造函数:
public ConnectParams(HashMap<String,Object> obj) {
for (Map.Entry<String, Object> entry : obj.entrySet()) {
try {
Field f = this.getClass().getField(entry.getKey());
f.set(this, entry.getValue()); /* <= CASTING PROBLEM */
} catch (NoSuchFieldException ex) {
log.error("did not find field '" + entry.getKey() + '"');
} catch (IllegalAccessException ex) {
log.error(ex.getMessage());
}
}
}
这里的问题是某些类的变量的类型是Double
,如果接收到数字3,它会认为它是Integer
类型问题。
-
是的,可以使用反射
Object something = "something"; String theType = "java.lang.String"; Class<?> theClass = Class.forName(theType); Object obj = theClass.cast(something);
但这没有多大意义,因为必须将结果对象保存在
Object
类型变量中。如果你需要变量属于给定的类,则可以将其强制转换为该类。如果要获取给定的类,
Number
例如:Object something = new Integer(123); String theType = "java.lang.Number"; Class<? extends Number> theClass = Class.forName(theType).asSubclass(Number.class); Number obj = theClass.cast(something);
但是这样做仍然没有意义,你可以将其转换为Number。
投射对象不会改变任何东西。这只是编译器对待它的方式。
这样做的唯一原因是检查对象是给定类的实例还是其任何子类的实例,但是最好使用instanceofor
来完成Class.isInstance()
。更新资料
根据你上次更新的真正的问题是,你有一个Integer在你的HashMap应分配给一个Double。在这种情况下,你可以做的是检查字段的类型并使用以下xxxValue()方法Number... Field f = this.getClass().getField(entry.getKey()); Object value = entry.getValue(); if (Integer.class.isAssignableFrom(f.getType())) { value = Integer.valueOf(((Number) entry.getValue()).intValue()); } else if (Double.class.isAssignableFrom(f.getType())) { value = Double.valueOf(((Number) entry.getValue()).doubleValue()); } // other cases as needed (Long, Float, ...) f.set(this, value); ...
(不确定我是否喜欢在中输入错误类型的想法Map)
-
如何将一种数字类型的切片转换为另一种类型
2021-02-01 关注 0 浏览111 1答案
-
将BufferedImage转换为另一种类型
2021-01-30 关注 0 浏览153 1答案
-
为什么我不能在Go中用一种类型的切片替代另一种类型?
2021-02-01 关注 0 浏览81 1答案
-
将数组中的多个字节转换为Go中的另一种类型
2021-02-01 关注 0 浏览117 1答案
-
一种将一种类型的切片转换为等效类型的切片的优雅方法?
2021-02-01 关注 0 浏览76 1答案
-
如何将一种数据类型的所有Sql列更改为另一种
2021-05-10 关注 0 浏览109 1答案
-
振荡分为两种类型:一种是______,另一种是______
2022-05-22 关注 0 浏览18 1答案
-
如何检测类型是否为另一种通用类型
2021-02-02 关注 0 浏览101 1答案
-
将谓词的表达式树突变为目标另一种类型
2021-02-02 关注 0 浏览80 1答案
-
在Java中从一种基础转换为另一种基础
2021-01-31 关注 0 浏览92 1答案