用4行代码将String转换为任何原始类型

问题

我有一些数据存储在文本文件中,它包含两个java.lang.String字符串:第一个包含了我的数据值,第二个是数据类型,例如,java.lang.Long、java.lang.Double等等。

那么,我如何构造包含我文本文件中给定类型的对象呢?

蹩脚的解决方案

对所有支持的一个很长的if-else-if扫描链,然后使用parse*(Integer.parseInt、Double.pareseDouble等)方法可以解决该问题。

为什么如此蹩脚?简单的说,因为想要加一种支持的类型就需要扩展if-else-if链,然后这将导致最终的代码过长和不易维护。

古怪的解决方案(funky solution)

使用可能的Java反射的力量。

Java代码
  1. ClassobjClass=Class.forName(type);
  2. Class[]prototype={String.class};
  3. Constructorctor=objClass.getConstructor(prototype);
  4. returnctor.newInstance(newObject[]{value});

那么,这4行代码做了什么呢?

我们通过type字符串(我数据文件中的第二个字符串)定义的类来构造一个Class的实例,然后我们通过唯一的一个字符串作为参数来获取它的构造方法,这里构造方法的签名由prototype变量来定义;最后,我们通过向构造方法传入一个字符串值来构造对象。

那么为什么它古怪呢?

首先,因为它用4行代码完成了我们蹩脚的解决方案所完成的代码,更古怪的是,它不仅可以构造Integer、Long和Double,同样可以使用字符串来构造任何类型的对象。

你可能感兴趣的:(java,prototype)