Kotlin属性不能被子接口覆盖

在下面的精简的例子中,你能解释为什么Kotlin编译器在覆盖一个我们进一步限制它的types的时候会抱怨(编译器消息: Var-property type is ‘B’, which is not a type of overriden public abstract var a: A ) interface A interface B : A { fun someFunc():Boolean } class C : B { override fun someFunc(): Boolean { return true } } abstract class D { abstract var a: A } class E : D() […]

Kotlin:最佳列表合并技术?

Kotlin列表操作/合并问题: 所以我得到了一个(可变的)对的列表,看起来像这样 … Pair(IDENTIFIER, “A”), Pair(TICKTICK, ““”), Pair(IDENTIFIER, “_B”) … 我需要遍历列表并结束合并到这个: … Pair(IDENTIFER, “A_B”) … 所以基本上find所有TICKTICK标记出现并合并前两个标记(即创建一个新的字符串加在一起)。 我目前的想法是做一个外观寻找TICKTICK令牌,然后删除先前,当前和下一个,然后插入一个新合并的令牌。 似乎应该有一个更自然的方式…。 任何想法 ? 这似乎也没有访问iteraror().previous即使由此链接指示

我可以写sampleVideoView吗? =在Kotlin中的findViewById (R.id.videoView)?

下面的代码是来自Kotlin示例项目,我想我总是可以写sampleVideoView? = findViewById(R.id.videoView) sampleVideoView? = findViewById(R.id.videoView) ,对不对? 和更多 代码sampleVideoView?.setVideoURI(Uri.parse(HLS_STREAMING_SAMPLE))与if (sampleVideoView!=null){sampleVideoView.setVideoURI(Uri.parse(HLS_STREAMING_SAMPLE))}是等价的,对不对? class MainActivity : AppCompatActivity(){ private var sampleVideoView: VideoView? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) sampleVideoView = findViewById(R.id.videoView) sampleVideoView?.setVideoURI(Uri.parse(HLS_STREAMING_SAMPLE)) …

在gradle-kotlin-dsl中的Android产品Flavors

我已经在Android项目中尝试了gradle-kotlin-dsl。 我设法使其工作,但我坚持如何定义productFlavors android { compileSdkVersion(Config.Android.compileSdkVersion) buildToolsVersion(Config.Android.buildToolsVersion) defaultConfig { minSdkVersion(Config.Android.minSdkVersion) targetSdkVersion(Config.Android.targetSdkVersion) versionCode = Config.Version.code versionName = Config.Version.name } buildTypes { getByName(“release”) { isMinifyEnabled = false } } flavorDimensions(“dimension”) productFlavors { //product flavors here } } 经过一番调查,我已经得到了解决方案,只需使用create方法: productFlavors { create(“flavor1”) { //flavor configurations here } create(“flavor2”) { //flavor configurations here } }

匕首2在Kotlin未解决的参考DaggerXXXSub

我试图在我的Android项目中使用Dagger 2,我在Kotlin编码。 我在我的项目中使用了Dagger 2,就像Dagger 2 Android中的例子。 应用程序/的build.gradle apply plugin: ‘com.android.application’ apply plugin: ‘kotlin-android’ apply plugin: ‘kotlin-android-extensions’ android { compileSdkVersion 26 buildToolsVersion “26.0.2” defaultConfig { applicationId “com.wj.kotlintest” minSdkVersion 15 targetSdkVersion 26 versionCode 1 versionName “1.0” testInstrumentationRunner “android.support.test.runner.AndroidJUnitRunner” } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile(‘proguard-android.txt’), ‘proguard-rules.pro’ } } } dependencies { implementation fileTree(dir: ‘libs’, include: […]

kotlin协程和timer是否有异步调用?

Kotlin是否有可能在一段时间内调用函数async(),女巫会在完成后返回默认结果? 我发现只有呼叫等待是可能的,而无限等待结果。 async { … val result = computation.await() … } 但真正的生产情况比你需要返回默认结果或exception。 在Kotlin协同程序中做什么是正确的方法? 像这样的东西: async { … val timeout = 100500 val result: SomeDeferredClass = computation.await(timeout) if (result.isTimeout()) { // get default value } else { // process result } … }

无法用匕首2运行kotlin

我是新手kotlin和匕首2.我尝试在Android Java中遵循本指南 。 但错误是扔… 错误:执行任务’:app:kaptDebugKotlin’失败。 内部编译器错误。 查看日志了解更多详情 我做错了什么? 应用 class App : Application() { val netComponent: NetComponent by lazy { DaggerNetComponent.builder() .appModule(AppModule(this)) // This also corresponds to the name of your module: %component_name%Module .netModule(NetModule(“https://api.github.com”)) .build() } override fun onCreate() { super.onCreate() } fun netComponent() : NetComponent = netComponent } NetComponent @Singleton @Component(modules= arrayOf(AppModule::class, NetModule::class)) interface […]

如何在Java / Kotlin中包含Annotation Processor生成的代码来测试类路径

我有一个Android项目正在从Java迁移到Kotlin。 在这个项目中,我有一个纯Kotlin模块,在这里我使用下面的build.gradle实现一个API客户端: apply plugin: ‘kotlin’ apply plugin: ‘kotlin-kapt’ dependencies { implementation “org.jetbrains.kotlin:kotlin-stdlib-jdk8:${kotlin_version}” implementation “com.squareup.retrofit2:retrofit:${retrofit_version}” implementation “com.squareup.retrofit2:converter-gson:${retrofit_version}” implementation “com.google.code.gson:gson:${gson_version}” implementation “com.squareup.okhttp3:logging-interceptor:${okhttp_version}” implementation “io.reactivex.rxjava2:rxjava:${rx_java_version}” implementation “io.reactivex.rxjava2:rxkotlin:${rx_kotlin_version}” implementation “com.jakewharton.retrofit:retrofit2-rxjava2-adapter:${retrofit2_rxjava2_adapter_version}” compileOnly “javax.annotation:jsr250-api:${jsr250_version}” implementation “com.google.dagger:dagger:${dagger_version}” kapt “com.google.dagger:dagger-compiler:${dagger_version}” testImplementation “junit:junit:${junit_version}” testImplementation “org.mockito:mockito-core:${mockito_version}” testImplementation “org.hamcrest:hamcrest-junit:${hamcrest_version}” testImplementation “com.squareup.okhttp3:mockwebserver:${mockwebserver_version}” // Dependence injection kaptTest “com.google.dagger:dagger-compiler:${dagger_version}” } unit testing有一个Annotation Processor依赖关系: kaptTest “com.google.dagger:dagger-compiler:${dagger_version}” 我可以在build / generated / […]

如何处理Kotlin中的exception?

我开始学习Kotlin,我无法理解如何处理exception。 我知道有没有检查的,但无论如何,如果我的方法抛出一个,我该怎么办? 例如: fun test(a: Int, b: Int) : Int { return a / b } 如果我除以零,我会有ArithmeticException。 那么我应该如何处理这样的事情呢?

匕首2不能从子组件(kotlin)注入

我知道,一般来说,这是使用Kotlin不应该有所作为,但我遇到了奇怪的情况,其中@Named限定符需要Kotlin中的范围如此裸露在我身边。 我有一个ViewHolderFactory类,它允许我创建一个简单的视图types – >视图持有者类的映射: @Singleton class ViewHolderFactoryImpl @Inject constructor( private val viewHolderComponentProvider: Provider ): ViewHolderFactory(mapOf( R.layout.view_error to ErrorViewHolder::class.java, R.layout.view_soft_error to SoftErrorViewHolder::class.java, R.layout.view_empty to EmptyViewHolder::class.java, R.layout.view_loading to LoadingViewHolder::class.java, R.layout.item_got_it to GotItViewHolder::class.java)) { override fun createViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { val viewHolder = super.createViewHolder(parent, viewType) if (viewHolder is Injectable) { viewHolderComponentProvider.get() .viewHolder(viewHolder) .build() .inject(viewHolder) } return […]