Tag: kotlin

使用默认参数键入Kotlin函数的签名

假设我有: fun addInvoker(adder: () -> Int = ::add): Int{ return adder() } fun add(num1:Int = 1, num2:Int = 1): Int{ return num1 + num2 } 我得到一个错误,因为:: add有两个参数,但addInvoker的签名要求它有零参数。 但是,如果我将其更改为: fun addInvoker(adder: (Int, Int) -> Int = ::add): Int{ return adder() } fun add(num1:Int = 1, num2:Int = 1): Int{ return num1 + num2 } 然后我不能调用加法器(),也就是用默认参数调用add。 那么,有什么办法可以使::添加默认参数到invokeAdder,但仍然调用添加与adder() […]

Kotlin协同程序如何比RxKotlin更好?

我为什么要使用Kotlin协同程序? RxKotlin库似乎更为复杂。 Kotlin协程看起来不那么强大,而且比较麻烦。 我根据安德烈·布雷斯拉夫(JetBrains)的这个设计演讲,在协同工作的基础上: https : //www.youtube.com/watch?v = 4W3ruTWUhpw 幻灯片从谈话是可以访问这里: https : //www.slideshare.net/abreslav/jvmls-2016-coroutines-in-kotlin

android数据绑定unit testing错误解析数据绑定编译器选项失败。 PARAMS:

当我尝试为我的kotlin android项目设置unit testing时,遇到以下错误。 以前有没有遇到过这样的问题? 这已被标记为官方错误跟踪器的错误 失败:生成失败,出现exception。 * 什么地方出了错: 执行失败的任务’:app:compileDebugUnitTestJavaWithJavac’。 > java.lang.RuntimeException:无法解析数据绑定编译器选项。 PARAMS: kapt.annotations:/Users/trevor/Dev/Android/workspace/gitlab-example/app/build/tmp/kapt/debugUnitTest/wrappers/annotations.debugUnitTest.txt kapt.kotlin.generated:/ Users / trevor / Dev / Android / workspace / gitlab-example / app / build / tmp / kapt / debugUnitTest / kotlinGenerated *尝试: 运行–info或–debug选项来获得更多的日志输出。 *例外是: org.gradle.api.tasks.TaskExecutionException:对于任务“:app:compileDebugUnitTestJavaWithJavac”,执行失败。 在org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:84) 在org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:55) 在org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:62) 在org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58) 在org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:88) 在org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:46) 在org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:51) 在org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:54) 在org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43) 在org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:34) 在org.gradle.execution.taskgraph.DefaultTaskGraphExeter $ $ EventFiringTaskWorker […]

什么是Kotlin后台?

作为Java开发人员,后台字段的概念对我来说有点陌生。 鉴于: class Sample { var counter = 0 // the initializer value is written directly to the backing field set(value) { if (value >= 0) field = value } } 这个后盾有什么好处? Kotlin的文档说: Kotlin中的类不能有字段。 但是,使用自定义访问器时有时需要有后台字段 。 为什么? 在setter中使用属性名称本身的区别是什么,例如。 class Sample { var counter = 0 set(value) { if (value >= 0) this.counter = value // […]

升级到Android 8.1后,startForeground将失败

将手机升级到8.1 Developer Preview后,我的后台服务不能再正常启动。 在我长时间运行的服务中,我实现了一个startForeground方法来启动在创建时调用的正在进行的通知。 @TargetApi(Build.VERSION_CODES.O) private fun startForeground() { // Safe call, handled by compat lib. val notificationBuilder = NotificationCompat.Builder(this, DEFAULT_CHANNEL_ID) val notification = notificationBuilder.setOngoing(true) .setSmallIcon(R.drawable.ic_launcher_foreground) .build() startForeground(101, notification) } 错误信息: 11-28 11:47:53.349 24704-24704/$PACKAGE_NAMEE/AndroidRuntime: FATAL EXCEPTION: main Process: $PACKAGE_NAME, PID: 24704 android.app.RemoteServiceException: Bad notification for startForeground: java.lang.RuntimeException: invalid channel for service notification: Notification(channel=My channel pri=0 […]

将支持库更新到27.0.0后,我的片段中有多个错误

将支持库从v-26.1.0更新到v-27.0.0之后将碎片中的多个错误更新。 这里是一些这些错误的列表: 错误:智能转换为“捆绑”是不可能的,因为“参数”是一个可以改变的可变属性。 错误:’onCreateView’覆盖任何东西 错误:’onViewCreated’覆盖任何东西 错误:types不匹配:推断types是View? 但是View是预期的 错误:types不匹配:推断types是上下文吗? 但上下文是预期的 错误:types不匹配:推断types是FragmentActivity? 但上下文是预期的 错误:types不匹配:推断types是FragmentActivity? 但上下文是预期的 从android工作室的模板为空片段。 override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) if (arguments != null) { mParam1 = arguments.getString(ARG_PARAM1) mParam2 = arguments.getString(ARG_PARAM2) } } override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? { return inflater!!.inflate(R.layout.fragment_blank, container, false) } override fun onViewCreated(view: View?, savedInstanceState: Bundle?) { […]

在某些情况下,是否可以在运行节点时启动的(Java)shell中实际复制和粘贴文本?

我已经搜索了Corda标签的问题find答案,但没有发现。 我也不能在Google上find令人满意的答案。 所以我现在面临的问题是:我正在和我的同事一起工作,我们正在尝试很多事情。 但是我们也必须不断输入整个命令(比如: start IOUFlow iouValue: 99, otherParty: “O=PartyB,L=New York,C=US” ),如果你正在做一对夫妇时间短暂的inheritance。 有什么方法可以在运行节点时启动的Shell中真正粘贴文本? 就此而言:在下一行之后,是否还有一种方法可以实际返回到shell中的上一行? Ps,不,我们公司不幸的是(还)发行MacBook …

Kotlin中的Android Parcelable:在Parcelable数据类中找不到CREATOR

随着Kotlin RC的发布,我开始编写一个应用程序来学习它,但我不知道如何让Parcelable工作。 数据类: data class Project (val reponame:String, val username:String, val language:String, val vcsUrl:String, val branches:Map) : Parcelable { companion object { val CREATOR = object : Parcelable.Creator { override fun createFromParcel(`in`: Parcel): Project { return Project(`in`) } override fun newArray(size: Int): Array { return arrayOfNulls(size) } } } protected constructor(parcelIn: Parcel) : this ( […]

如何在Intellij中导入目录/完整软件包以进行测试

我正在开发一个有两个分开的目录的项目(比如我们称为cordApp的两个独立的应用程序),在第一个cordapp中我们有“a,b,c”类,第二个是“d,e,f “class。 背后的想法是,第二个cordapp必须比第一个轻得多,因为它必须在网络上旅行,所以第一个的“重量”大于第二个。 我们把测试文件夹放在第一个(更重),但是我也需要测试“打火机”的东西,我怎样才能导入第一个第二个? 现在我的解决方案是在第二个文件夹中创建测试文件夹,但这不是很好,因为它会使文件更重。 任何想法如何导入另一个完整的目录/完整的应用程序? 这是该项目的一张照片,“cordapp-contract-states”是轻的,必须在“cordapp”

Json到Kotlin数据类

有没有一种方法和/或库自动创建从Json Kotlin数据类,就像它在Scala Json.Spray中工作? 像这样的东西: data class User(id: Int, name: String) class DataClassFactory(val json: String) { fun getUser(): User { //some reflection return User(10, “Kirill”) } } fun main(args: Array): Unit { val json = “{id: 10, name: Kirill}” val usr = DataClassFactory(json).getUser() println(usr) }