UninferredParameterTypeConstructor在构建期间异常参数未明确指定时发生异常
我有以下代码(使用RxKotlin 0.40.1 ):
class Result<T, E>(val data: T? = null, val error: E? = null) fun <T, E> wrapResult(errorInfoFactory: (Throwable) -> E): (Observable<T>) -> Observable<Result<T, E>> = { it.map { Result<T, E>(it) }.onErrorReturn { Result<T, E>(error = errorInfoFactory(it)) } }
只是供参考,这是需要轻易地转换可能会抛出错误的Observable
,始终返回Result
对象的Observable
,所以onError
永远不会触发。
我想这样使用它:
fun dangerousOperation() = 0 fun getErrorMessage(t: Throwable) = "error occurred" fun test() { val resultObservable = Observable.fromCallable(::dangerousOperation).compose(wrapResult(::getErrorMessage)) }
Android Studio 1.5.1与Kotlin插件1.0.0-release-IJ141-56不会在代码中突出显示任何错误。 但是当我尝试构建它时,出现错误:
//错误:(24,9)org.jetbrains.kotlin.codegen.CompilationException:后端(JVM)内部错误:遇到的错误类型:org.jetbrains.kotlin.types.ErrorUtils$UninferredParameterTypeConstructor@68754e6(ErrorTypeImpl)。 //原因:遇到错误类型:org.jetbrains.kotlin.types.ErrorUtils$UninferredParameterTypeConstructor@68754e6(ErrorTypeImpl)。 //正在编译的文件和位置:(24,9)在/home/d/work/workspace/Hitch-hiking-Stats/app/src/main/java/ru/netimen/hitch_hikingstats/MemoryRepo.kt // PsiElement: val resultObservable = Observable.just(dangerousOperation())。compose(wrapResult(:: getErrorMessage))//引发根本原因:JetTypeMapper.java:435 // at org.jetbrains.kotlin.codegen.ExpressionCodegen.genQualified ExpressionCodegen.java:299)// at org.jetbrains.kotlin.codegen.ExpressionCodegen.genStatement(ExpressionCodegen.java:339)// at org.jetbrains.kotlin.codegen.ExpressionCodegen.generateBlock(ExpressionCodegen.java:1532)//在org.jetbrains.kotlin.codegen.ExpressionCodegen.generateBlock(ExpressionCodegen.java:1485)// at org.jetbrains.kotlin.codegen.CodegenStatementVisitor.visitBlockExpression(CodegenStatementVisitor.java:56)// at org.jetbrains.kotlin.codegen .CodegenStatementVisitor.visitBlockExpression(CodegenStatementVisitor.java:22)// at org.jetbrains.kotlin.psi.KtBlockExpression.accept(KtBlockExpression.ja va:44)// at org.jetbrains.kotlin.codegen.ExpressionCodegen.genQualified(ExpressionCodegen.java:280)// at org.jetbrains.kotlin.codegen.ExpressionCodegen.genStatement(ExpressionCodegen.java:339)// at org .jetbrains.kotlin.codegen.ExpressionCodegen.gen(ExpressionCodegen.java:309)// at org.jetbrains.kotlin.codegen.ExpressionCodegen.returnExpression(ExpressionCodegen.java:1873)// at org.jetbrains.kotlin.codegen.FunctionGenerationStrategy $ FunctionDefault.doGenerateBody(FunctionGenerationStrategy.java:50)// at org.jetbrains.kotlin.codegen.FunctionGenerationStrategy $ CodegenBased.generateBody(FunctionGenerationStrategy.java:72)// at org.jetbrains.kotlin.codegen.FunctionCodegen.generateMethodBody(FunctionCodegen .java:364)// at org.jetbrains.kotlin.codegen.FunctionCodegen.generateMethod(FunctionCodegen.java:203)// at org.jetbrains.kotlin.codegen.FunctionCodegen.generateMethod(FunctionCodegen.java:138)
但是当我改变我的test
功能
fun test() { val resultObservable = Observable.fromCallable(::dangerousOperation).compose(wrapResult<Int, String>(::getErrorMessage)) }
一切都编译好。 但是,如果我没有明确指定wrapResult
的泛型参数(如果IDE没有突出显示任何错误),为什么我会得到这个异常呢?
这是编译器错误: https : //youtrack.jetbrains.com/issue/KT-11144 。 出现这个bug的主要原因是:function wrapResult
只在自己的返回类型中使用泛型参数T
- 我在android项目中使用这个库,但使用https://github.com/igalata/Bubble-Picker/错误
- 为什么试图访问常量值的未解决的参考?
- Kotlin在Android上使用MultiDex进行授权,低于21
- 如何在Android片段中正确实现一个接口?
- 在Kotlin中从数组填充ListView
- java.lang.IllegalStateException:Dex存档:仅为.CLASS文件设置.DEX扩展名
- 与碎片的Kotlin
- Kotlin解构变量不适用于Pair,Triple或数据类
- 警告:警告:注释处理器“android.arch.lifecycle.LifecycleProcessor”支持的源版本“RELEASE_7”小于“源”1.8