Я делал несколько экспериментов с Котлином, и я играл с одноэлементными узорами. Я хотел сохранить один экземпляр объекта Database
. Как и на Java, я думал, что оберну его синглом.Kotlin - единственный экземпляр класса, не являющегося одиночным?
import com.github.davidmoten.rx.jdbc.ConnectionProviderFromUrl
import com.github.davidmoten.rx.jdbc.Database
object DbManager {
val database : Database =
Database.from(ConnectionProviderFromUrl("jdbc:sqlite:C:/Users/Thomas/OneDrive/Data/finance_rx.db").get())
}
Что меня удивили, однако, по-видимому, нет встроенного способа собрать добытчик для него (как свойства для класса). Это было просто прямо, разоблачая то, что database
собственность миру без инкапсуляции, которой я не хотел.
Я мог бы просто сделать это частным и явно сделать свой собственный геттер (но я смотрю на Котлина, потому что я увлечен ленивым). Однако, я думаю, я наткнулся на другой способ сделать это.
Я мог бы создать файл Kotlin и объявить приватную переменную и публичную функцию, чтобы инкапсулировать и подвергать ее безопасности, не помещая ее ни в какой класс или в singleton вообще!
import com.github.davidmoten.rx.jdbc.ConnectionProviderFromUrl
import com.github.davidmoten.rx.jdbc.Database
private val database : Database =
Database.from(ConnectionProviderFromUrl("jdbc:sqlite:C:/Users/Thomas/OneDrive/Data/finance_rx.db").get())
fun db(): Database = database;
Дело в том, что это просто слишком легко. Я чувствую, что делаю что-то плохое. Но в то же время это имеет смысл. Никто не любит звонить MySingleton.getInstance().getDb()
сто раз. Является ли этот шаблон открытым, а не анти-шаблоном?
Также существует ли способ скомпилировать геттеры и инкапсулировать конечные свойства на одноэлементный? Или я сам реализую эти методы?
Большое спасибо Андрей, я был в замешательстве, потому что я обращался к классу Kotlin из кода Java (который показывал явные getters для взаимодействия). Я ожидал этого к тому же, когда обращался к нему прямо в Котлин. Я понял, это похоже на C#. – tmn
На стороне примечания, еще раз спасибо за то, чтобы собрать этот отличный язык. Это все и многое другое, что я хотел, чтобы Java была (особенно из C# в качестве моего первого языка). – tmn