Tag: dsl

Kotlin型安全制造商DSLs,用于最外层功能的安全

我将使用实现DSL进行HTML创建的文档中的官方示例 。 自Kotlin 1.1以来, @DslMarker注解允许我们限制类中的函数范围,就像@HtmlTagMarker注释中的例子一样。 当试图编写错误结构化的代码时,这给我们一个错误: html { body { body { // this in an error, as it's a function call on the outside Html element } } } 但是,这并不妨碍嵌套最外层功能,这是DSL的入口点。 例如,就像现在这样的例子,这可以写下来没有问题: html { html { } } 在这方面有没有办法让DSL更安全?

扩展Kotlin数据类以便与JPA一起使用?

Kotlin有一个Data类,可以自动实现equals和hashcode ,但是这些在JPA上下文中仍然不能自动使用 。 为了弥补这一点,我想知道如何扩展Data类型,以便分配一个“业务密钥”或id属性是final和non updatable并用作为业务密钥的UUID初始化,并有equals()和hashcode()方法使用该属性的实现。 我大致在想这样的事情: jpa class User(id: JpaId, val name: String, val age: Int) jpa class User(bid: JpaBid, val name: String, val age: Int) 而不是像这样使用Data类: data class User(bid: long, val name: String, val age: Int) 我们正在使用一种新的类jpa 。 我们还有两个新的类型, JpaId和JpaBid ,用来确定id属性是否应该是UUID或商业密钥,如ISBN号,sku等 如果使用JpaId类型,则会自动生成密钥。 如果使用JpaBid则应该在构造函数中提供该键。 这将确保只要JPA实体被构建,它就可以被唯一标识。 思考? 这是在Kotlin中做的非常直接的事情,还是我们需要在JVM烤架(Kotlin的新品牌)中起床?

带kotlin功能路由器的非反应性Spring Web

我可以使用新的Kotlin DSL来设置路由,例如: router { ("/blog" and accept(TEXT_HTML)).nest { GET("/", fooHandler::findAllView) GET("/{slug}", fooHandler::findOneView) } ("/api/blog" and accept(APPLICATION_JSON)).nest { GET("/", barHandler::findAll) GET("/{id}", barHandler::findOne) } } 与无反应的网页部分? 基础数据库将是Postgres和非Reactive基于servlet的应用程序服务器,因此我不希望/不需要使用Flux或Mono作为barHandler或存储库函数的返回类型。 但是我喜欢新的路由器DSL和Kotlin一起使用,它比基于@RequestMapping注解更强大,并且更容易掌握所有的应用路由。

在Kotlin中,如何将扩展方法添加到另一个类中,但仅在特定的上下文中才可见?

在Kotlin中,我想将扩展方法添加到类中,例如添加到Entity类中。 但是我只想在Entity处于事务中时看到这些扩展,否则就隐藏了。 例如,如果我定义这些类和扩展: interface Entity {} fun Entity.save() {} fun Entity.delete() {} class Transaction { fun start() {} fun commit() {} fun rollback() {} } 我现在可以在任何时候不小心调用save()和delete() ,但是我只希望它们在事务的start()之后可用,而不是在commit()或rollback() ? 目前我可以做到这一点,这是错误的: someEntity.save() // DO NOT WANT TO ALLOW HERE val tx = Transaction() tx.start() someEntity.save() // YES, ALLOW tx.commit() someEntity.delete() // DO NOT WANT TO ALLOW HERE […]

什么是Kotlin结构?

我正在看这个Kotlin对象声明: object A : B({ variableName1 = "text1" variableName2 = "text2" params { param("Foo", "Bar") } }) 而我无法弄清楚B类构造函数的参数是什么。 我在这个例子中有目的地提取了信息,但是B类实际上是 jetbrains.buildServer.configs.kotlin.v10.BuildType 而我无法找到该类型的文档。 我发现了一些接近的东西,但它是一个接口的定义,因此没有构造函数。 总而言之,Kotlin的这个构造是什么? { variableName1 = "text1" variableName2 = "text2" params { param("Foo", "Bar") } }

Kotlin Builder vs构造函数

我对Kotlin很新,而且我也遇到了这两种表示: Car(name = "CarName") 和 car { name = "CarName" } 有没有关于什么时候应该使用的指导方针? 这个文件似乎不太清楚。