我有一个应用,其中属性文件包含以下格式的数据
name=abc#$#String
age=23#$#Integer
当输入值时,将其转换为#$#后的值。是否可以在不使用开关或if then else语句的情况下执行此操作。
我想要做的是有一种方法将字符串String或Integer转换为对象,并且能够在不使用if then else块的情况下转换值。这种东西
String[] tmp = props.getProperty("name").split("#$#");
String name = (tmp[1])tmp[0];
答案 0 :(得分:1)
首先,您不能将String对象强制转换为Integer对象; String不是Integer的子类。但是,您可以将String文字转换为对象并向其投射内容:
Class.forName("some.package.name.SomeClass").cast(aSubclass);
但是,上述内容仍然适用。您将无法将“23”(一个字符串)转换为整数。
看起来你已经过度思考了一下。这可能就像if else语句一样简单,或者也许是Factory方法,它最终会做同样的事情。
另外,我假设您事先知道对象类型,因为您不会首先将 name 映射到Integer。在这种情况下,你可以做亚历山德罗斯所说的。
答案 1 :(得分:0)
我不确定我是否理解你的问题。 首先,我认为使用split方法会使事情变得更复杂。既然你知道你的值包含#$#,你可以用空字符串替换它们。 其次,既然你知道(我假设)你的属性文件中你有一个名为name的属性,并且有一个String类型和一个整数的属性age,你可以执行以下操作(如果需要检查则不需要)
String name = props.getProperty("name").replace("$#$", "");
Integer age = Integer.parseInt(props.getProperty("age").replace("$#$", ""));
这是你在找什么?