gpt4 book ai didi

java:如何将变量从一种类型动态转换为另一种类型?

转载 作者:IT老高 更新时间:2023-10-28 13:51:07 24 4
gpt4 key购买 nike

我想对 Java 变量进行动态转换,转换类型存储在不同的变量中。

这是常规选角:

 String a = (String) 5;

这就是我想要的:

 String theType = 'String';
String a = (theType) 5;

这可能吗?如果可以,怎么做?谢谢!

更新

我正在尝试用我收到的 HashMap 填充一个类。

这是构造函数:

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 并且我有类型问题.

最佳答案

是的,可以使用 Reflection

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

对象的类型转换不会改变任何东西;这只是编译器处理它的方式
这样做的唯一原因是检查对象是否是给定类或其任何子类的实例,但最好使用 instanceofClass.isInstance ().

更新

根据您上次的更新,真正的问题是您的 HashMap 中有一个 Integer 应该分配给 Double 。在这种情况下,您可以做的是检查字段的类型并使用 Number

xxxValue() 方法
...
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 中输入错误类型的想法)

关于java:如何将变量从一种类型动态转换为另一种类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2127318/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com