小编fra*_*eff的帖子

以编程方式获取Play中的路线!框架2.5.x

play-swagger模块中,我们使用play.routes.compiler.RoutesFileParser来从Play获取所有已注册的路由,并进一步将它们解析为API文档:

val parsedRoutes = RoutesFileParser.parse(new File(app.classloader.getResource(routesFile).toURI))
val routes = parsedRoutes.right.get.collect {
  case (route: PlayRoute) => {
    logger.debug(s"Adding route '$route'")
    Seq(route.copy(path = route.path.copy(parts = StaticPart(prefix + "/") +: route.path.parts)))
  }
  case (include: PlayInclude) => {
    logger.debug(s"Processing route include $include")
    parseRoutesHelper(playRoutesClassNameToFileName(include.router), include.prefix)
  }
}.flatten
Run Code Online (Sandbox Code Playgroud)

这会导致以下错误: java.lang.NoClassDefFoundError: play/routes/compiler/RoutesFileParser

似乎RoutesFileParser在Play中变得私密!2.5.

获取所有Play路线的正确方法是什么,如上例所示?

routing scala playframework swagger

7
推荐指数
1
解决办法
1191
查看次数

为什么 Kotlin 枚举属性不是编译时常量?

这个问题的主要目标是理解实现以及为什么会这样。当然,它的解决方案或解决方法也将受到高度赞赏......

给出这个例子:

enum class SomeEnum(val customProp: String) {
  FOO("fooProp"),
  BAR("barProp");
}

@Target(AnnotationTarget.FUNCTION)
@Retention(AnnotationRetention.SOURCE)
annotation class TheAnnotation(
  val targetValue: String
)

@TheAnnotation(targetValue = SomeEnum.FOO.customProp)
fun testFun() {
  
}

Run Code Online (Sandbox Code Playgroud)

编译结果出现以下错误:

SomeEnum.kt: (14, 30):注释参数必须是编译时常量

由于显而易见的原因,注释值(以及其他值)必须是编译时常量,这在许多不同方面都是有意义的。我不清楚的是为什么customProp编译器不将其视为常量。

如果枚举被定义为有限的、封闭的信息集,那么根据我的理解,它们应该只在编译时可变,即“编译时常量”。对于枚举在 Kotlin 运行时可以以某种方式进行修改的不太可能的情况,这也可以回答这个问题。

附录:

枚举值(例如SomeEnum.FOO)实际上被视为编译时常量。证据是,以下稍作修改的代码片段可以编译:

enum class SomeEnum(val customProp: String) {
  FOO("fooProp"),
  BAR("barProp");
}

@Target(AnnotationTarget.FUNCTION)
@Retention(AnnotationRetention.SOURCE)
@MustBeDocumented
annotation class TheAnnotation(
  val targetValue: SomeEnum
)

@TheAnnotation(targetValue = SomeEnum.FOO)
fun testFun() {

}
Run Code Online (Sandbox Code Playgroud)

enums kotlin

3
推荐指数
1
解决办法
1468
查看次数

标签 统计

enums ×1

kotlin ×1

playframework ×1

routing ×1

scala ×1

swagger ×1