【发布时间】:2017-02-24 09:49:15
【问题描述】:
我的项目中有以下辅助方法:
def close(c: Closeable) {
Option(c).foreach(s => Try(s.close))
}
我有一些类有一个 close 方法但没有实现 Closeable。如果我将辅助方法更改为使用结构类型,我仍然可以在这些类上使用它:
def close(c: {def close()}) {
Option(c).foreach(s => Try(s.close))
}
然而,这引入了反射的使用,这是我想在运行时避免的事情。
有没有办法使用类似于结构类型的东西而不引起运行时反射?
即以相同的方式Shapeless 允许对字段进行通用访问,也许隐式参数+宏可以用于以相同的方式访问方法?
【问题讨论】:
-
我建议一般避免使用结构类型,但我个人认为运行时反射的底层使用不是问题,因为在这种情况下它不涉及放弃类型安全等.
标签: scala reflection macros shapeless structural-typing