java - 将字符串值转换为未知(在编译时)对象类型

标签 java class

我有一个类类型,我有一个字符串值:

Class<?> type = Integer.class // <-- in reality, that type is 
                              // determined at runtime
String value = "3";           // <-- same here, actually read from a file

我的目标是实例化“type”的实例并用“value”的值填充它...这样我就有了等同于

Integer i = new Integer(value);

唯一可能的方法是使用一长串 if 语句:

if (type == Integer.class) {
  // do this
}

或者还有另一种聪明/正确的方法吗?可能的类类型可能完全不同,例如 Integer/Date 等...

编辑1

这里有更多的上下文:

我有一个包含许多值的文件,这些值是不同数据类型实例的文本表示:

1|3.4|2011-08-24

在我的程序中,我得到了一个类类型和该类中的一个方法,它们在编译时都是未知的。

我想在该类型的实例上调用该方法,并将文件中的值作为参数。但是为此,我确实必须具有与该值对应的对象,在示例中可以是 Integer/int、float/double、Date。 我可以通过反射获取方法形式参数的这些数据类型,但我不确定进行从字符串到对象的转换的最佳方法...

也许这个伪程序会解决问题:

String[] values = getValuesFromFile;
Class<?> type = getType();
Method method = getMethod();
Class<?>[] formalParameterTypes = getMethodParameterTypes();
Object[] objects;
for(int i; i < values.length; i++)
  objects[i] = convert(values[i],formalParameterTypes[i]);
method.invoke(objects);

最佳答案

动态类加载和反射就是为了解决这些问题而发明的。例如

Class<?> type = Class.forName("MyClassName");
Object obj = type.newInstance();

现在如果你想在对象中设置字段,你有两个选择:

  • 如果潜在类共享一个公共(public)基类/接口(interface),您可以将对象向下转换为该接口(interface)并通过接口(interface)方法对其进行操作,
  • 如果潜在类没有继承关系但具有相同的方法/字段,您可以通过bean introspection设置字段值,或者您可以使用反射调用该方法。

关于java - 将字符串值转换为未知(在编译时)对象类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7175025/

相关文章:

java - Servlets - 如何从 servlet 输出中读取(out.println)

java - Alfresco - 如何获取所有不是 Alfresco 文件夹的子级 (Java)

c++ - 类中析构函数定义的 Collect2 错误

c# - 初始化查找<int, string>

java - 如何保持 jdbc 到 postgres 的存活

java - 在 Java 中选择随机种子的跨平台方式是什么?

java - ATG 创建组件并动态设置日志记录

java - 调用不同类中的方法并传递数组

python - 了解 `self` 和 `cls` 之间的区别以及它们是否引用相同的属性

c# - 找不到 'Name' 的定义