Tag: 科特林

Kotlin使用适用于伴侣对象会引发意外错误

比方说,我想通过复制类B值来实例化类A的一个对象,例如,映射DTO的时候这是很常见的做法。 要在Java或Groovy中实现这一点,我会创建一个静态方法在相应的DTO上签名fromB(A a) ,然后在Java中使用a.with { val = b.val… } a.val = b.val…或使用a.with { val = b.val… }在Groovy中。 在Kotlin中,我注意到instance.apply{}与Groovy非常相似,它允许我直接访问对象variables,而不必一直引用对象本身,因为引用似乎隐含在闭包中。 然而,当在同伴对象中使用apply时,我遇到了一个奇怪的和意想不到的错误。 如果我在A的伴侣对象的函数中使用A().apply {} ,我得到一个错误Expression is inaccessible from a nested class ‘Companion’, use ‘inner’ keyword to make the class inner变得很奇怪,因为我打电话直接应用于对象的一个​​实例,并因此期望我应该总是能够访问它的公共属性。 更何况,似乎伴侣对象不能被设置为inner因此错误信息中的建议并不是太有帮助。 以下是完整的示例代码: fun main(args: Array) { val b = B(“Hello”, “World”) val a = A.fromB(b) print(“$a.value1 $a.value2”) } […]

匕首不能提供注射Kotlin

当我尝试使用Kotlin和Dagger 2时,我有这个问题。 “接口不能提供@提供或@产生注释的方法”。 这是我的Module类: @Module class MenuActivityModule(@NonNull private val menuActivity: MenuActivity) { @Provides @MenuActivityScope fun provideGameScreenDimensions(application: Application) = GameScreenDimension(application.resources) @Provides @MenuActivityScope fun provideAudio() = AndroidAudio(menuActivity) @Provides @MenuActivityScope fun providePowerManager() = menuActivity.getSystemService(Context.POWER_SERVICE) as PowerManager @Provides @MenuActivityScope fun provideWakeLock(@NonNull powerManager: PowerManager) = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, Preferences.APPLICATION_TAG) } This is a part of my Activity class, where I inject some […]

为什么在Android Studio中重新启动后用Kotlin编写的界面消失了?

我有一个用Kotlin编写的接口来进行REST调用(到目前为止): import io.reactivex.Observable import okhttp3.ResponseBody import retrofit2.Response import retrofit2.http.Body import retrofit2.http.POST const val PUSH_ENDPOINT = “prices/v1” interface ArticleSearchRestAdapter { @POST(“$PUSH_ENDPOINT/articles/search”) fun register(@Body articlerequest: ArticleRequest): Observable<Response> } 正如我所说,这个工程到目前为止,但在Android Studio的电脑重新启动后,图标变成了 从 至 。 然后其他使用ArticleSearchRestAdapter的类无法find此接口并标记为红色。 这是Androuid Studio中的错误吗? 哪里不对? IDE:Android Studio 3.0 Beta 6

Kotlin / Android应用程序 – 从外部活动更改视图元素

我正在使用kotlin lang来创建我的Android应用程序。 我想创建一个对象(单身人士),专门用于动态地(如按钮等)模仿我的主要活动的视图组件,并将由我的主要活动本身使用。 出现了一些问题。 首先,对象是(当然)不是活动types,所以我不能使用例如findViewById和其他活动的function等我试图通过传递主要活动的对象的构造函数来解决这个问题,但它是不允许的 – 因为对象不能他们的构造函数。 此外,我不知道,如果这个应用程序设计是可以接受的,至少有良好的做法。 如果不是真的 – 我应该使用什么样的设计模式来分离如何改变布局的逻辑和只修改视图元素的代码? 提前感谢您的任何建议。

UNRESOLVED_REFERENCE未解决的参考:isInitialized

我试图使用Kotlin的检查lateinit属性状态的新function,但得到了这个编译时错误Unresolved reference: isInitialized 我已经用kotlin_version kotlin_version = ‘1.2.0-beta-31’ (android studio版本为3.0)的kotlin版本来配置我的build.gradle文件,并且还用相同的版本更新了kotlin插件。 这是我的代码片断,我正在使用isInitialized检查。 还包括一个反映库 compile group: ‘org.jetbrains.kotlin’, name: ‘kotlin-reflect’, version: ‘1.2.0-beta-31’ 。 lateinit var k: SomeObjectType fun instance(): SomeObjectType { if (::k.isInitialized) { k = SomeObjectType() } return k }

GSON不能用自定义getter来反序列化Kotlin类

我有一堂课 class Address { var address1: String? = null } 简单的JSON String jsonString = “{\”address1\”:\”test\”}”; 所以我想要反序列化,所以我只是写 Gson gson = new GsonBuilder().create(); Address address = gson.fromJson(jsonString, Address.class); 它完美的作品。 但是,如果我添加自定义getter class Address { var address1: String? = null get() = address1 ?: “” } 我正在得到 java.lang.StackOverflowError at ru.reksoft.okey.models.Address.getAddress1(Address.kt:8) at ru.reksoft.okey.models.Address.getAddress1(Address.kt:8) //and here are a lot of same […]

在Kotlin填充字符串

我试图在Kotlin中填充字符串以在控制台输出上实现一些正确的对齐。 沿着这些线路的东西: accountsLoopQuery – “$.contactPoints.contactPoints[?(@.contactAccount.id)]” brokerPassword – ***** brokerURI – tcp://localhost:61616 brokerUsername – admin contactPointPriorityProperties – “contactPointPriority.properties” customerCollection – “customer” customerHistoryCollection – “customer_history” defaultSystemOwner – “TUIGROUP” 我最终以这种方式编码 – 用Java的String.format作弊: mutableList.forEach { cp -> println(String.format(“%-45s – %s”, cp.name, cp.value)) } Kotlin库有没有适当的方法?

是否有可能将数据类的实例解构成类的属性?

我有一个数据类MyDataClass : data class MyDataClass(val a: Int, val b: Int) 和具有两个属性的类MyClass 。 我想解构一个MyDataClass的实例,所以a和b被分配给MyClass属性,而不是声明新的variables: class MyClass { val a: Int val b: Int init { val mdc = MyDataClass(1, 4) (a, b) = mdc //error } }

如何把一个可变集合变成一个不可变的集合

我写了一小段代码,在内部处理我的数据在一个可变的映射中,而这个映射又具有可变列表。 我想公开我的数据给API用户,但是为了避免任何不安全的数据发布,我想把它暴露在不可变的集合中,即使在内部被可变的数据处理时也是如此。 class School { val roster: MutableMap<Int, MutableList> = mutableMapOf<Int, MutableList>() fun add(name: String, grade: Int): Unit { val students = roster.getOrPut(grade) { mutableListOf() } if (!students.contains(name)) { students.add(name) } } fun sort(): Map<Int, List> { return db().mapValues { entry -> entry.value.sorted() } .toSortedMap() } fun grade(grade: Int) = db().getOrElse(grade, { listOf() }) fun […]

Kotlin,减少重复的代码

我的每个API服务接口类都创建了静态方法, interface AuthApiService { @FormUrlEncoded @POST(“api/auth/login”) fun postLogin(@Field(“username”) username: String, @Field(“password”) password: String): io.reactivex.Observable companion object Factory { fun create(): AuthApiService { val gson = GsonBuilder().setLenient().create() val retrofit = Retrofit.Builder() .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) .addConverterFactory(GsonConverterFactory.create(gson)) .baseUrl(“http:192.168.24.188:8080”) .build() return retrofit.create(AuthApiService::class.java) } } } interface BBBApiService { companion object Factory { fun create(): BBBApiService { val gson = GsonBuilder().setLenient().create() val […]