我正试图将一个Android应用程序从Java转换为Kotlin。应用程序中有几个单人。我为没有构造函数参数的单例使用了一个伴生对象。还有另一个接受构造函数参数的单例。
Java代码:
public class TasksLocalDataSource implements TasksDataSource {
private static TasksLocalDataSource INSTANCE;
private TasksDbHelper mDbHelper;
// Prevent direct instantiation.
private TasksLocalDataSource(@NonNull Context context) {
checkNotNull(context);
mDbHelper = new TasksDbHelper(context);
}
public static TasksLocalDataSource getInstance(@NonNull Context context) {
if (INSTANCE == null) {
INSTANCE = new TasksLocalDataSource(context);
}
return INSTANCE;
}
}
class TasksLocalDataSource private constructor(context: Context) : TasksDataSource {
private val mDbHelper: TasksDbHelper
init {
checkNotNull(context)
mDbHelper = TasksDbHelper(context)
}
companion object {
lateinit var INSTANCE: TasksLocalDataSource
private val initialized = AtomicBoolean()
fun getInstance(context: Context) : TasksLocalDataSource {
if(initialized.getAndSet(true)) {
INSTANCE = TasksLocalDataSource(context)
}
return INSTANCE
}
}
}
下面是Google的体系结构组件示例代码中的一个简洁的替代方案,它使用alth
函数:
class UsersDatabase : RoomDatabase() {
companion object {
@Volatile private var INSTANCE: UsersDatabase? = null
fun getInstance(context: Context): UsersDatabase =
INSTANCE ?: synchronized(this) {
INSTANCE ?: buildDatabase(context).also { INSTANCE = it }
}
private fun buildDatabase(context: Context) =
Room.databaseBuilder(context.applicationContext,
UsersDatabase::class.java, "Sample.db")
.build()
}
}
在一个同时使用静态编程语言和java的Android项目中,我想在一些java文件中使用静态编程语言函数和。 所以我想到了使用扩展。我做了下面的工作, 然而,我曾考虑将分隔符作为参数传递,但在java中尝试使用“删除第二个参数…”时,它给了我一个错误 方法正确吗?能做到吗?
我有以下代码: 我不希望字段ui有一个getter,但是kotlin在默认情况下会生成它,因为它是构造函数中定义的val。 在properties and fields文档中,我发现我可以用以下代码生成一个私有getter 但我在构造函数定义中找不到这样做的方法
嗨,我为tictactoe游戏编写了这个示例代码,除了checkWinner函数之外,其他都正常工作,它接受两个参数ArrayList和currentPlayer来检查胜利者。该函数在每个玩家在tictactoe游戏中查看获胜的点击单元格后调用。我不知道错误在哪里!事先谢谢你
我想为实现接口的类中的函数参数使用默认值,如下所示: 现在这里是编译的,这里是不编译的: KO:不允许重写函数为其参数指定默认值 KO:类“LocalFileStoreService”不是抽象的,并且没有实现抽象成员公共抽象存储文件(路径:String,负载:InputStream,类型:MediaType):fqn中定义的单元。。。文件存储服务 好 啊: 这是预期的行为吗?有没有更好的方法来管理
最近,我开始学习,并琢磨出函数可能是这样没有参数编写的: 这是怎么可能的,以及在引擎盖下正在做什么?不允许我们这样做。
我在Java中经常使用AOP。看起来传统的java方法很容易在Kotlin中重用。鉴于Kotlin强调不变性,JDK代理似乎是Kotlin中最可行的解决方案,前提是您遵循相同的接口优先(在Kotlin中更好地说是特征优先)编程风格,例如: 因此,现在可以很容易地用Spring/AOP编写一个方面,并将其应用到MyServiceImpl实例中。应该提到的是,基于Java接口生成的代理可能更受Kotl