我的构建文件如下所示: val nexusBaseUri: String by extra val gradle_version: String by extra val kotlin_version: String by extra buildscript { val nexusBaseUri by extra { “https://mynexusserver/nexus” } val gradle_version by extra { “4.1” } val kotlin_version by extra { “1.1.4-3” } val springBoot_version by extra { “2.0.0.M3” } repositories { maven { url = uri(“$nexusBaseUri/repository/public”) } jcenter() […]
我有很多的行动。 所有的动作都和一些在所有动作中传递的Object / Context一起工作。 我想使用模式策略/政策。 这里是Kotlin的例子: interface Action { val name: String fun run(ctx: Context) } class Multiply: Action { override name = “MULTIPLY” override fun run(ctx: Context) { writeToDb(ctx.id, ctx.number * 2) } } class Substract class SendNotification etc… 所以我想在启动时注册所有策略。 从Enum这样的结构中选择策略。 val action = selectAwaitingAction() val ctx = selectCtxById(action.transaction_id) perfromAction(ctx, actions.getByName(action.name)) fun performAction(ctx Context, […]
在Kotlin中,如果一个对象( let接收者)不为null ,那么通常使用let来执行代码,以替代if != null检查,如下所示: val nullable: String? = “anything” nullable?.let { println(it) } 在其他情况下,利用let是否有意义? 仅供参考, let Kotlin的stdlib,定义如下: @kotlin.internal.InlineOnly public inline fun T.let(block: (T) -> R): R = block(this)
使用内容提供程序总是带有几乎不可读的样板,难以发现编程错误。 Android Architecture Components的房间持久性库缓解了这个问题,但它似乎并不适用于Android的内容提供商。 有没有人成功地使用日历提供程序或其他Android的内容提供商与房间,获得更多的可读代码? 如果是的话,请回答并张贴在Kotlin的小片,如果可以;) 谢谢你的帮助!
我是编程新手,刚刚开始学习Kotlin。 我目前正在处理类和构造函数。 现在我正在努力在我参加的课程中完成一个“编码挑战”。 我刚刚完成了所有的编码工作,但是当我尝试运行所有的东西的时候,IntelliJ说,在一个红色中心的小窗口里: 运行“oo.Coding_Challenge_ClassesKt”时出错:在“Kotlin_Course”模块中找不到类“oo.Coding_Challenge_ClassesKt” 这听起来可能是一个愚蠢的问题,但是在两周的时间里,这实际上是我第一次遇到这样的问题,无法看到我的代码是否正确。 感谢大家的耐心。
在Kotlin,当我有一个非公众成员和一个inline fun时候,有一个编译错误说: 错误:(22,25)Kotlin:公共API内联函数无法访问非公共API private fun f(): Unit在com.example定义的private fun f(): Unit 我发现有几种方法可以在公共inline fun调用我的函数,但哪种方法是最好的呢? 假设我有一个private fun f() { } 。 然后我发现的选项是: fun f() { } 只是公开。 这是基本的解决方案,但是如果其他人发现有主要的缺点,这可能会结束最好的。 @PublishedApi internal fun f() { } 在Kotlin 1.1-M04中引入,注释可以应用于内部成员,使其有效地公开。 我注意到的含义是,任何库用户仍然可以从Java代码中调用它,这是我不喜欢的。 @Suppress(“NON_PUBLIC_CALL_FROM_PUBLIC_INLINE”) inline fun g() { f() } 在stdlib源文件中发现,这个注解似乎在应用于调用函数时抑制了错误。 但是它有什么限制? 它只能用于inline函数吗? 在某些情况下会导致程序失败? 我尝试用这个技巧从内联函数中调用一个非内联函数,并且工作,但是看起来很可疑。 @JvmSynthetic @PublishedApi internal fun f() { } 将第二个解决方案与字节码中的合成标志组合在一起。 我不确定这是否是@JvmSynthetic的正确用法 […]
从Android Studio开始,我创建了一个Map Activity项目; 所以,没有自定义代码。 唯一的自定义更改是复制google_maps_api.xml _( https://console.developers.google.com/flows/enableapi?apiid=maps_android_backend&keyType=CLIENT_SIDE_ANDROID&r=) _中的url,并使用它创建API密钥。 Android Studio:3.0.1模拟器:带API 25的Nexus 5X Build.gradle文件 应用插件:’com.android.application’ 应用插件:’kotlin-android’ 应用插件:’kotlin-android-extensions’ android { compileSdkVersion 26 defaultConfig { applicationId“xxxx.xxx.xxxx” minSdkVersion 19 targetSdkVersion 26 versionCode 1 versionName“1.0” testInstrumentationRunner“android.support.test.runner.AndroidJUnitRunner” } buildTypes { 发布 { minifyEnabled false proguardFiles getDefaultProguardFile(’proguard-android.txt’),’proguard-rules.pro’ } } } 依赖{ 执行fileTree(dir:’libs’,include:[‘* .jar’]) 实施 “org.jetbrains.kotlin:科特林-STDLIB-jre7:$ kotlin_version” 实现’com.android.support:appcompat-v7:26.1.0′ 实现’com.google.android.gms:play-services-maps:11.0.0′ testImplementation’junit:junit:4.12′ androidTestImplementation’com.android.support.test:runner:1.0.1′ androidTestImplementation’com.android.support.test.espresso:espresso-core:3.0.1′ } […]
让我们假设我有一个DSLContext对象,我需要下拉到JDBC Connection对象的级别来执行一些非JOOQ逻辑。 (在我的情况下,我想使用Postgres驱动程序的CopyManager对象)。 如果我的DSLContext是事务性的,那么直接在Connection上执行的操作是否会被相同的事务包装? 我正在使用JOOQ的默认交易提供者。 例如(Kotlin代码,但对于Java用户应该是非常透明的) dsl.transaction { transactionConfig -> val transactionalDSL = DSL.using(transactionConfig) transactionalDSL.connection { connection -> val manager = CopyManager(connection as BaseConnection) manager.copyInto(table, inputStream, fields) } }
我一直在阅读有关Flutter一段时间,我想转换我的应用程序的部分了解更多。 我有一个现有的Java / Kotlin编写的Android项目。 是否可以添加一个新的Flutter模块到现有的应用程序?
我在Kotlin写了一个vertx服务接口,为此我试图生成服务代理。 但是,除了在src/main generated目录之外,它什么也不做。 src/main/java/amb85/portfolio/package-info.java : @ModuleGen(name = “portfolio”, groupPackage = “amb85.portfolio”) package amb85.portfolio; import io.vertx.codegen.annotations.ModuleGen; 然后我有以下服务接口src/main/kotlin/amb85/portfolio/PortfolioService.kt : @VertxGen @ProxyGen interface PortfolioService { companion object { val ADDRESS = “service.portfolio” val EVENT_ADDRESS = “portfolio” } fun getPortfolio(resultHandler: (AsyncResult) -> Unit) fun buy(amount: Int, quote: JsonObject, resultHandler: (AsyncResult) -> Unit) fun sell(amount: Int, quote:JsonObject, resultHandler: (AsyncResult) -> […]