我想实现像聪明参数转换器功能使用Scala的功能。实现转换参数,以斯卡拉
基本上在我的计划,我需要读取属性文件的参数,所以很明显,他们都是字符串,我想,然后给每个参数转换中,我传递的参数的特定类型。
这是我开始编码实现:
def getParam[T](key : String , value : String, paramClass : T): Any = {
value match {
paramClass match {
case i if i == Int => value.trim.toInt
case b if b == Boolean => value.trim.toBoolean
case _ => value.trim
}
}
/* Exception handling is missing at the moment */
}
用法:
val convertedInt = getParam("some.int.property.key", "10", Int)
val convertedBoolean = getParam("some.boolean.property.key", "true", Boolean)
val plainString = getParam("some.string.property.key", "value",String)
注意要点:
我的程序现在我需要只是3个主要类型的类型:字符串,整数和布尔, 如果有可能,我想扩展到更多对象类型
这是不聪明,因为我需要明确的对每一个不可能性类型匹配的转换我想类似的做法
的更reflectional此代码不能正常工作,它给我的编译错误:“对象java.lang.String中不是值”当我尝试转换(实际上没有转换发生,因为属性值以String的形式出现)。
任何人都可以帮我吗?我在斯卡拉很新手,也许我缺少一些东西
使用'def getParam [T:ParamMeta](key:String,value:String):T =隐式地[ParamMeta [T]] .application(value.trim)'也是可能的 –
这是实现这个?我的意思是,我需要每种类型的案例对象?我相信 – Giorgio
里面有一些逻辑的方法如果你真的需要用侧代码来扩展这个'getParam'函数(原始的'getParam'没有改动) - 这是最典型的方法。 否则,你可以匹配像'x匹配{case i:Int => ... case s:String => ...}' – Maxim