2

我有一些数据传输类,我想在平台之间共享。只有一个区别。这些实现在不同的平台上有不同的注释。最好的方法是什么?我知道唯一的方法。

在 commonsMain 中:

expect class ErrorMessage (message: String = "") : DataTransferObject {
    var message: String
}

在 jvmMain 中:

@SomeJvmAnnotation
actual class ErrorMessage actual constructor (actual var message: String) : DataTransferObject

但是,如果我以这种方式实现每个类,那么 KMM 就没有任何利润。这样我需要实现每个类 n + 1 次,其中 n 是多个平台。有没有更简单的方法来应用不同的注释?

可能有办法不把期望放在课堂上。

4

1 回答 1

2

不是最好的解决方案,但您可以使用actualexpect定义特定于平台的注释。

我用它只在 JS 运行时忽略单元测试

常见的主要

 ​/*​* 
 ​ * Ignore a test when running the test on a JavaScript test runtime. 
 ​ ​*/ 
 ​@Target( ​AnnotationTarget​.​CLASS​, ​AnnotationTarget​.​FUNCTION​ ) 
 ​expect​ ​annotation​ ​class​ ​JsIgnore​()

jsMain

 ​actual​ ​typealias​ ​JsIgnore​ ​=​ kotlin.test.​Ignore

jvmMain

 ​// Nothing to do. This should only ignore tests on the JavaScript test runtime. 
 ​actual​ ​annotation​ ​class​ ​JsIgnore

我想这是否适合您将真正取决于每个平台所需的特定注释,以及它们在语义上重叠的程度。

于 2022-01-15T20:29:48.400 回答