当前位置: 首页 > 知识库问答 >
问题:

Kotlin多平台expect/actual类,一些方法共享

海叶秋
2023-03-14

在KMM中是否可以有一些期望的抽象类?该项目是AndroidiOS

我希望有一些共享类,但部分方法应该是特定于平台的。

最好的方法是什么?也许是预期类和实际类的共享父类的某种组合?

例如,

expect class Logger {
    protected timer:Long = 0
    fun info(s:String)
    fun warning(s:String)
    fun resetTimer() {
         timer = 0
    }
}

据我所知,这样的例子是不可能的,因为预期的类应该是接口而不是抽象类。

对于两种平台,resetTimer方法可能相同。

不知怎么可能?

共有1个答案

谯翔
2023-03-14

简而言之,答案是否定的。

您可以将expect/actual视为对特定于平台的抽象,类似于接口,但灵活性要低得多(接口是对任何事物的抽象,而不仅仅是对特定于平台的实现的抽象)

有多个选项,但在任何情况下,都需要将公共逻辑与预期的声明分开。

 类似资料:
  • 我在设置一个活动时遇到了问题,该活动驻留在KMM项目中的共享代码中,并使用Jetpack Compose。当活动是在Android源代码(/app)中时,这个操作很好。但我想发布一个共享的(/common)库,而不需要任何应用程序。 null 进程:com.surrus.peopleinspace,pid:4067 java.lang.nosuchmethoderror:没有静态方法setcont

  • 我的KMP Jetpack Compose项目中继续出现Gradle配置错误 配置项目:共享时出现问题。 找不到名为“testApi”的配置。 我的设置是: Android Studio北极狐狸2020.3.1金丝雀3 项目级别设置 注意:通过删除一部分一部分的配置,我似乎发现问题似乎是围绕着android配置本身,所以如果我删除android()部分 只要简单的jvm()就可以了

  • 我试图在一个Kotlin多平台移动项目的共享代码中实现一个计时器功能。计时器将运行n秒,每秒它将回调以更新UI。而且,UI中的一个按钮可以取消计时器。这不可避免地意味着我必须开始某种新线程,我的问题是哪一种机制是合适的--工人、关联者还是其他什么? 我尝试使用带有以下代码的coroutine,但在IOS上遇到了InvalidMutabilityException: 我确实了解moko-time库,

  • 最近,我将我的KMP项目分为fullstack项目和核心库(主要由公共数据类组成),并发现我需要在公共模块中定义的一个数据类上使用JVM库中的注释。 在Kotlin公共代码中似乎不可能使用Java库中的注释。 解决此类问题的可能方法是什么,最好避免通过声明此类数据类,然后在平台中重复其实现,但使用不同的注释?