在界面中声明最后的乐趣

我正在Kotlin编写一个合作的multithreading引擎。 我试图写一个接口,如下所示: interface Processor { var suspendAction: (Continuation) -> Unit inline suspend fun yield() = suspendCoroutine(suspendAction) suspend fun process(inbox: Inbox) = Unit } yield()是我想提供给所有这个接口的实现者的服务。 由于每个虚拟呼叫站点代表了内联的障碍,并且由于每个进入suspend fun入口都有其代价,出于性能的原因,我需要这个函数是final ,但是Kotlin不允许我这样做。 我发现一个解决方法将yield()转换为扩展的乐趣: inline suspend fun Processor.yield() = suspendCoroutine(suspendAction) 我想问一下,这样的用例是否会激励Kotlin语言设计师在interface final fun 。 请注意,与典型的等待IO暂停方案不同,此处的yield()发生在CPU密集型热点线程上。

如何在Kotlin中声明和初始化MutableSet?

如何将MutableSetvariables声明为{1,2,3}?

当使用AsyncTask 将Object转换为GoogleMap时,我得到java.lang.RuntimeException

我在LogCat中得到这个消息: java.lang.RuntimeException: An error occurred while executing doInBackground() at android.os.AsyncTask$3.done(AsyncTask.java:330) at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354) at java.util.concurrent.FutureTask.setException(FutureTask.java:223) at java.util.concurrent.FutureTask.run(FutureTask.java:242) at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:255) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607) at java.lang.Thread.run(Thread.java:776) Caused by: java.lang.ClassCastException: java.lang.Object[] cannot be cast to com.google.android.gms.maps.GoogleMap 在android studio中使用Kotlin class GetDirectionsData : AsyncTask() { internal var mMap: GoogleMap? = null internal var url: String = “” internal var googleDirectionsData: […]

如何在Android Studio中更新Kotlin.Runtime

Windows 10,Android Studio 3.0.1。 刚刚解雇了,得到了“有一个新的版本,更新?”。 我更新了。 现在我得到“过时的Kotlin.Runtime。Kotlin运行时版本已经过时了几个库”,后面跟着一个长的URL。 所以我需要更新Kotlin运行时。 我怎么做?

Kotlin,ArrayList的set方法不会替换给定的元素

我正在将子弹移植到kotlin,并编写了运行HelloWorld示例所需的所有东西。 我现在正处于调试阶段,我遇到了对象引用的问题。 一开始,我第一次进入collideTTpersistentStack : fun collideTTpersistentStack(root0: DbvtNode?, root1: DbvtNode?, collider: DbvtTreeCollider) { if (root0 != null && root1 != null) { var depth = 1 var treshold = DOUBLE_STACKSIZE – 4 val element = StkNN(root0, root1) if (stkStack.isNotEmpty()) stkStack[0] = element else stkStack += element stkStack resize DOUBLE_STACKSIZE do { val p = stkStack[–depth] if […]

Kotlin:Apply和Also有什么区别?

申请和还有什么区别? 从我所知道的下面的代码做同样的事情: 应用 val person = Person().apply { name = “Tony Stark” age = 52 // More such stuff } 也 val person = Person().also { it.name = “Tony Stark” it.age = 52 // More such stuff } 有什么区别,我应该使用一个吗? 另外,有些情况下,一个会工作,另一个不会?

卡普gradle任务例外:类转换exception

执行任务’:app:kaptSomethingDebugKotlin’失败。 我已经重构了一些我的课程,我已经添加了一些kotlin类和function纯粹的类。 当我尝试编译项目,这些奇怪的事情发生,没有任何exception堆栈跟踪帮助我。 看来这个问题是由于Kotlin的java组合 Unable to receive command from client socket connection from /127.0.0.1:5573 to /127.0.0.1:13020. Discarding connection. org.gradle.internal.remote.internal.MessageIOException: Could not read message from ‘/127.0.0.1:13020’. at org.gradle.internal.remote.internal.inet.SocketConnection.receive(SocketConnectin.java:92) at org.gradle.launcher.daemon.server.SynchronizedDispatchConnection.receive(SynchronizedDispatchConnection.java:68) at org.gradle.launcher.daemon.server.DefaultDaemonConnection$1.run(DefaultDaemonConnection.java:63) at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63) at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55) at java.lang.Thread.run(Thread.java:748) Caused by: java.lang.IllegalArgumentException: Unexpected type tag 67 found. at org.gradle.internal.serialize.DefaultSerializerRegistry$TaggedTypeSerializer.read(DefaultSerializerRegistry.java:142) at org.gradle.internal.serialize.Serializers$StatefulSerializerAdapter$1.read(Serializers.java:36) […]

为什么`Intrinsics.checkParameterIsNotNull`没有内联?

在Kotlin中,如果我们将一些Kotlin字节码反编译为Java,我们经常可以看到这样的语句: Intrinsics.checkParameterIsNotNull(foo, “foo”) 如果我们继续探索,我们可以看到这个方法的反编译实现,它的实现和它的名字完全一样: public static void checkParameterIsNotNull(Object value, String paramName) { if (value == null) { throwParameterIsNullException(paramName); } } 由于这个类( Intrinsics )的存在,我不能使用没有stdlib的Kotlin,即使我尽我所能避免使用stdlib中的函数,它也会自动生成对Intrinsics.checkParameterIsNotNull调用。 由于这个方法的实现非常短(而且很常见),为什么这个函数没有内联呢? 有没有一些注释可以让我们阻止Kotlin编译器生成这个空检查? (也许像@TrustedNotNull ) 对于ProGuard:我很担心,因为我正在使用共享库,在这种情况下ProGuard不适合我。 我显然知道那些代码清除工具(ProGuard,dce-js),我知道如何以及何时使用它们。 我只是问为什么是一个函数不内联。

没有调用Android的LiveData.addSource onChanged事件

我正在使用Android Archi + Retrofit + RxAndroid在Kotlin。 我需要从服务器获取响应时更新我的​​数据对象。 但是livedata.addSource的onChanged没有调用。 我从Git代码获取帮助: – https://github.com/shahbazahmed1269/AndroidGithubIssues 这是我在Kotlin的代码: class LoginRepository : BaseRepository() { fun callLoginApi(data: HashMap): LiveData { val liveData: MutableLiveData = MutableLiveData() // val call = mApiService.getLoginUser(data) mApiService.getLoginUser(data) .subscribeOn(Schedulers.newThread()) .observeOn(AndroidSchedulers.mainThread()) .subscribe( { user -> liveData.value = user Log.e(“response”, user.toString()) }, { error -> liveData.value = LoginResponse(error = error.localizedMessage) Log.e(“Error”, error.message) […]

是否有可能重新使用Kotlin Anko的布局

我读到使用Anko的最大好处是它的可重用性。 但我无法find确切的例子。 目前在新的Android布局系统中,锅炉板如下: DrawerLayout (with some setup) CoordinatorLayout (with some setup) AppBarLayout (with some setup) ToolBar NavigationView (with header inflated) 从上面的布局结构来看,只有是varry。 在很多情况下,这些仪式设置几乎在每个活动中都重复着。 所以在这里与安科即时思考如果有一个可重用的解决方案关于这个问题。 我不期望它可以重复使用的通用布局,但至少我可以尽量减少项目中的仪式代码。 也许我需要像这样的东西: class MainUI: AnkoComponent { override fun createView(ui: AnkoContext): View{ return with(ui) { myCustomRootLayout { //here is what will be } } } } 从上面的代码,我期待myCustomRootLayout将做所有的根布局,如(DrawerLayout,CoordinatorLayout等)的仪式设置。 那可能吗? 编辑所以我想我的问题是: 如何使一个自定义组件可以承载其他组件