scala - 用一种方法包装泛型函数调用
问题描述
我有这样的事情:
...
case BooleanType =>
try {
reader.getBooleanValue()
} catch {
case e: IllegalStateException => throwMyException()
}
case IntegerType =>
try {
reader.getIntValue()
} catch {
case e: IllegalStateException => throwMyException()
}
...etc
但这是很多重复的代码。必须有一种方法可以执行以下操作:
case BooleanType => tryGetReaderSafely(reader.getBooleanValue())
case IntegerType => tryGetReaderSafely(reader.getIntValue())
..etc
我很好奇的方法是
def tryGetReaderSafely(reader: Reader): Any = {
try {
reader.getType // how do I do the correct call here?
} catch {
case e: IllegalStateException => throwMyException()
}
}
问题是我将函数结果而不是函数本身传递给调用——我知道你可以使用回调,但我仍然不确定如何使用回调来调用正确的reader.getType
方法
解决方案
尝试:
def tryGetReaderSafely[T](reader: Reader, f: Reader => T): T =
try {
f(reader)
} catch {
case e: IllegalStateException => throwMyException()
}
用法:
case BooleanType => tryGetReaderSafely(reader, _.getBooleanValue)
case IntegerType => tryGetReaderSafely(reader, _.getIntValue)
推荐阅读
- php - 对象被神秘地覆盖
- python - API:在 Python 中使用 curl 调用 URL
- typescript - NgRx createAction 方法返回类型签名的含义
- python-2.7 - 如何处理 h264 格式的视频,修改每一帧并使用 openCV/ffmpeg 使用处理后的图像创建另一个 h264 格式的视频
- javascript - 地图中的值没有改变?
- hadoop - 一个datanode在hdfs中的使用率达到100%?平衡器不工作
- python - 如何将多个图表添加到一个excel的不同工作表中?
- gremlin - 如何删除gremlin中没有边的不可修改顶点?
- testing - PM2 Testcafe fs 操作导致崩溃
- scala - 关于在 scala 中使用 spark 数据框的说明