在我的项目中,我有一个委托(用Java编写)用于通过RPC获取数据,其中大部分方法以“get”开始,一些不需要参数,所以Kotlin建议用属性访问语法替换对它们的调用,而不是实现属性语义(当然,因为他们执行网络请求),所以我想在默认情况下禁止所有这些方法的检查,而不是每个调用的地方(是的,我知道@Suppress注释块,它和我所需要的完全相反)。 有没有任何解决方案,除了重命名,所以他们不会以“得到”开始?
Updated 21.06.2015 我想在同一个项目中尝试kotlin和android数据绑定。 但是,当我添加到kotlin gradle插件依赖我不能建立一个甚至一个空的项目了错误: 无法生成视图绑定器java.lang.NoClassDefFoundError:kotlin / jvm / internal / ExtensionFunctionImpl buildscript { repositories { jcenter() } dependencies { classpath ‘com.android.tools.build:gradle:1.3.0-beta3’ classpath “com.android.databinding:dataBinder:1.0-rc0” classpath “org.jetbrains.kotlin:kotlin-gradle-plugin:0.12.613” } } 任何workaroud使它一起工作?
我正在学习Kotlin的过程中,阅读关于lateinit关键字使我怀疑它的用处。 考虑这个代码: var testString: String? = null lateinit var lateTestString: String fun print() { print(testString?.length) print(lateTestString.length) } 这里得到字符串长度的唯一区别是通过使用?.来检查它是否为null ?. 运营商。 在访问属性或调用方法时,是否使用lateinit快捷方式不必添加额外的问号? 就这一点而言,我认为在访问lateinit一个问题时,不得不添加额外的问号而不是获得一个exception。 更多的研究表明,对于那些variables尚未初始化的注入和/或unit testing来说, lateinit是很好的选择,但是它是可以的。 然而,这不值得有这个额外的东西?. 而不是仅仅. 不冒险例外?
我有一个java库,我已经使用gradle添加了“提供”配置。 apply plugin: ‘java’ apply plugin: ‘idea’ apply plugin: ‘checkstyle’ apply from: file(‘../gradle/gradle-mvn-push.gradle’) sourceCompatibility = JavaVersion.VERSION_1_7 targetCompatibility = JavaVersion.VERSION_1_7 repositories { mavenCentral() } group = GROUP version = VERSION_NAME configurations { provided } sourceSets { main.compileClasspath += configurations.provided test.compileClasspath += configurations.provided test.runtimeClasspath += configurations.provided } javadoc.classpath += configurations.provided idea { module { scopes.PROVIDED.plus += [configurations.provided] […]
我一直在试图在我的项目中使用房间数据库,但它一直在崩溃,我不能确定是什么原因是… 这是我的情况: 当用户在对话框中输入一个日志点并按下ok时,这个函数被调用 fun manualOkClicked() { /*Check if all fields are valid ( if they are, location is created and folderId is saved )*/ if (logpoint.canCreateLocation(context) && logpoint.canSelectFolder(view?.getSelectedFolder())) { DataSource.saveLogpoint(logpoint) } } 这里是我如何保存日志点: fun saveLogpoint(logpoint: UserLogpoint) { Thread({ mydb.logpointDao().insert(logpoint) }).start() } 而我的应用程序崩溃与此日志: 12-27 16:17:31.108 17932-17941/com.example.myproject.debug A/libc: Fatal signal 11 (SIGSEGV), code 1, fault addr 0x61724474 […]
我想用Kintlin为JVM启动一个使用IntelliJ IDE的新项目,但是我无法获得配置。 我试图按照这个教程 ,之后没有工作(“运行_DefaultPackage”选项甚至没有出现),我开始尝试直观地认为应该做的没有成功。 到目前为止(重复)发生了什么: 我创建了一个新项目,选择“Kotlin – JVM”作为项目types。 我在第二页上点击Kotlin Runtime的“Create …”按钮,并选择“Copy to:lib”。 我点击“完成”,创建的项目有一个与我的项目同名的模块。 没有默认的源文件或任何配置。 我创建了一个名为“app.kt”的Kotlin文件(我也尝试了其他名称,例如“Main.kt”),并将以下源代码放在: fun main(args: Array){ println(“Hello world!”) } 我右键单击代码编辑器和左窗格中的文件,find本教程中提到的“Run’_DefaultPackage’”选项,但未能在其中find它。 我创建了一个新的Kotlin配置,要求我放入一个“主类”。 看到这个,我把代码改成: public class Main { fun main(args: Array) { println(“Hello world!”) } } 我编辑我的配置并将主类设置为“Main”,然后运行配置。 它失败,并出现此错误:“错误正在运行:函数’main’在’Main’类中找不到。 我错过了什么?
我有以下class级: object CharacterDAO : GenericDAO(Character::class.java, “id”) { } 我想嘲笑使用Mockito / PowerMockito。 有什么建议么?
我在托管代码中创建了一个缓冲区: var nativeBuffer = ShortArray(bufferSize) 这是Kotlin代码,但是根据stdlib文档 ,这个语法实际上是一个返回short []的包装器。 然后我想使用JNI从C ++写入这个缓冲区: JNIEXPORT void JNICALL Java_package_class_name_readNext (JNIEnv * env, jclass clazz, jshortArray javaArray) { jboolean * isCopy; short * targetArray = env->GetShortArrayElements(javaArray, isCopy); // Do stuff to targetArray } 问题是GetShortArrayElements调用总是导致崩溃,并使用以下逻辑删除: 11-07 21:23:53.610 86-86/? I/DEBUG: *** *** *** *** *** *** *** *** *** *** *** *** *** […]
这是我的Java类: public class OnlineMatch{ private FacebookUser firstplayer; private FacebookUser secondplayer; public OnlineMatch(){ } public OnlineMatch(FacebookUser firstplayer, FacebookUser secondplayer) { this.firstplayer = firstplayer; this.secondplayer = secondplayer; } public FacebookUser getFirstplayer() { return firstplayer; } public void setFirstplayer(FacebookUser firstplayer) { this.firstplayer = firstplayer; } public FacebookUser getSecondplayer() { return secondplayer; } public void setSecondplayer(FacebookUser secondplayer) { this.secondplayer […]
我很好奇为什么有可能调用kotlin的构造函数与默认参数,而不是从java代码的方法? 例如: class Test(val test: String = “”) Java客户端: void test() { new Test(); } 没关系。 但是如果我想用方法做同样的技巧,这是不可能的: class Test { fun x(x: Int = 5) { } } Java客户端,编译错误: void test() { new Test().x(); } 在我看到的方法反编译为java字节码 X $默认 方法。 它是静态的,我不能从Java调用它(想法不允许我这样做)。 而且只有添加了 @JvmOverloads 使用默认arg的kotlin方法的注解创建了一个可从java端访问的方法。 问题是为什么有两种方法如何从java调用kotlin的默认值? 为什么不做一切可以访问/默认情况下不可访问? 这是一个糟糕的设计,还是有这个严肃的理由?