Tag: 科特林

带有产品风味和Kotlin的ClassNotFoundException

我有一个主要在Kotlin编写的项目,但有一些Java类。 现在项目进展顺利,我想增加在不同的环境之间切换的可能性,为此我使用了风味: productFlavors { prod { dimension “default” buildConfigField ‘boolean’, ‘FABRIC’, ‘true’ applicationId = “com.myapp” } beta { dimension “default” buildConfigField ‘boolean’, ‘FABRIC’, ‘true’ applicationId = “com.myapp.beta” } dev { dimension “default” buildConfigField ‘boolean’, ‘FABRIC’, ‘false’ applicationId = “com.myapp.dev” } } 然而,当我运行的味道是不生产(这不会改变applicationId),我得到一个Java类的ClassDefNotFoundException: Caused by: java.lang.ClassNotFoundException: Didn’t find class “com.myapp.beta.ui.view.ScrollBehavior” on path: DexPathList[[zip file “/data/app/com.myapp.beta-1/base.apk”],nativeLibraryDirectories=[/data/app/com.myapp.beta-1/lib/arm64, /system/lib64, […]

为什么Kotlin不支持“三元操作符”

解释:这个问题更多的是关于Kotlin的设计意图。 许多expression式语言都支持Ternary operator , if expression [例如, Ruby,Groovy 。] 首先,我知道Groovy支持Ternary operator和Elvis operator : Groovy中的三元运算符 。 所以我不认为这是一个语法问题。 然后官方文件说: 在Kotlin中,如果是一个expression式,即它返回一个值。 所以没有三元运算符(condition?then:else),因为普通的如果在这个角色中工作的很好。 这并不能说服我。 因为Kotlin支持普通的Elvis operator在那个角色中工作得很好。 我认为ternary operator有时比普通的好,但是我想知道为什么Kotlin不支持ternary operator ?

Kotlin – 不变的参考

我正在尝试使用新的相机硬件API(android.hardware.camera2)为我的android应用程序的示例代码。 首先,我通过Android Studio的Kotlin插件的自动转换function将Java代码转换为Kotlin代码。 下面是一段转换后的代码: private val mCaptureCallback = object : CameraCaptureSession.CaptureCallback() { private fun process(result: CaptureResult) { when (mState) { STATE_PREVIEW -> { }// We have nothing to do when the camera preview is working normally. STATE_WAITING_LOCK -> { val afState = result.get(CaptureResult.CONTROL_AF_STATE) if (CaptureResult.CONTROL_AF_STATE_FOCUSED_LOCKED == afState || CaptureResult.CONTROL_AF_STATE_NOT_FOCUSED_LOCKED == afState) { // CONTROL_AE_STATE can […]

Kotlin到Java(图书馆帮助)

我正在使用这个库来生成渐变: https : //github.com/revely-inc/co.revely.gradient 用于设置渐变animation的kotlin代码如下所示: val color1 = Color.parseColor(“#00c6ff”) val color2 = Color.parseColor(“#ff72ff”) val valueAnimator = ValueAnimator.ofFloat(0f, 360f) valueAnimator.duration = 15000 valueAnimator.repeatCount = ValueAnimator.INFINITE valueAnimator.interpolator = LinearInterpolator() RevelyGradient.sweep() .colors(intArrayOf(color1, color2, color1)) .animate(valueAnimator, { _valueAnimator, _gradientDrawable -> _gradientDrawable.angle = _valueAnimator.animatedValue as Float }) .onBackgroundOf(container) valueAnimator.start() 我到目前为止所获得的java代码: ValueAnimator valueAnimator = new ValueAnimator(); valueAnimator.ofFloat(0f, 360f); valueAnimator.setDuration(15000); valueAnimator.setRepeatCount(ValueAnimator.INFINITE); valueAnimator.setInterpolator(new […]

在更改Kotlin源文件时,使Intellij IDE运行Kotlin / Java注释处理

最近我开始使用Kotlin v1.2和Intellij IDEA v2017.3。 我在Kotlin中实现了一个注释处理器,当一个类使用支持的注释types进行注释时,它将在META-INF下写入一个资源文件。 我可以看到注释处理器正在处理另一个Maven项目,该项目正在使用实现作为依赖项。 如果我运行mvn clean compile ,META-INF下的文件在target / classes / META-INF中正确生成。 我的问题是,当源文件更改时,Intellij不启动注释处理器。 例如,如果我重命名注释的Kotlin类。 资源文件不会重新生成或更新。 (我还没有看到从Intellij工作的注释处理器…) 我还启用了注释处理,并在IDE中配置了“从项目类路径获取处理器”,如下所述。 我将项目导入为Maven项目,这里是我的pom.xml – 正如我所说的:在使用Maven构建时正在工作: 4.0.0 org.example usage 1 1.2.0 ${project.basedir}/src/main/kotlin ${project.basedir}/src/test/kotlin kotlin-maven-plugin org.jetbrains.kotlin ${kotlin.version} 1.8 kapt generate-sources kapt src/main/kotlin org.example.MyProcessor compile compile compile test-compile test-compile test-compile org.jetbrains.kotlin kotlin-stdlib ${kotlin.version} org.example processor 1 junit junit 4.12 test org.jetbrains.kotlin […]

布尔 – 在Kotlin中的Int转换

是否没有内置的方式来在Kotlin中的boolean – int之间进行转换? 我正在谈论通常的: true -> 1 false -> 0 如果不是,那么做一个习惯性的方法是什么?

Kotlin higherorder函数(可调用引用)编译器崩溃

所以我搞乱了Kotlin的一些Android开发,并遇到了一个编译器bug …如果有人有一些输入,会很好。 可调用引用(在这种情况下通过parameter passing函数)的Kotlin示例正在崩溃我的环境。 对我来说,这绝对是这个语言的一个重要特征,而不是让它工作瘫痪。 我的环境是: Android Studio 0.3.6 Kotlin插件0.6.602 任何有识之士将不胜感激 fun isOdd(x: Int) = x % 2 != 0 val numbers = listOf(1, 2, 3) println(numbers.filter(::isOdd)) 而编译器的错误是: :1:org.jetbrains.jet.codegen.CompilationException: Back-end (JVM) Internal error: Cannot resolve: callableReferenceFakeCall File being compiled and position: (1,9) in dummy.kt PsiElement: callableReferenceFakeCall(p0) at org.jetbrains.jet.codegen.ExpressionCodegen.visitCallExpression(ExpressionCodegen.java:1893) at org.jetbrains.jet.codegen.ExpressionCodegen.visitCallExpression(ExpressionCodegen.java:80) at org.jetbrains.jet.lang.psi.JetCallExpression.accept(JetCallExpression.java:42) at org.jetbrains.jet.codegen.ExpressionCodegen.genQualified(ExpressionCodegen.java:257) at […]

Gradle无法下载Kotlin存储库

我正在使用Gradle构建Kotlin简单的Hello-Worl 我的build.gradle是: /* * This build file was generated by the Gradle ‘init’ task. * * This generated file contains a commented-out sample Java project to get you started. * For more details take a look at the Java Quickstart chapter in the Gradle * user guide available at https://docs.gradle.org/4.3.1/userguide/tutorial_java_projects.html */ // Apply the java […]

在kotlin中过滤一个子字符串

在kotlin我想过滤一个字符串,并返回一个只有有效字符的子字符串。 说我们有有效的人物, valid = listOf(‘A’, ‘B’, ‘C’) 如何在kotlin中以最简洁的方式定义一个fcn来过滤一个字符串,只保留有效的字符? 例如, ‘ABCDEBCA’ –> ‘ABCBCA’ ‘AEDC’ –> ‘AC’ 无法find一个规范的方式来做到这一点,而不诉诸使用一个字符串数组。 import kotlin.text.filter class Test(){ val VALID = listOf(“A”, “B”, “C”) fun filterString(expression: String): String{ expression.filter(x –> !VALID.contains(x)) #Doesn’t work } } 筛选器文档没有显示任何特别针对弹簧操作的示例。

在Kotlin中动态获取函数名称

如何在Kotlin中动态获取名称函数? 即: fun myFunc11() { println(“Very useful function 11”) } val funcName = “myFunc” + 11 val funcRef = getFunction(funcName) funcRef() 编辑:接受的答案似乎是正确的,但代码目前正在碰撞Kotlin中的一些错误。 提交的错误报告: https : //youtrack.jetbrains.com/issue/KT-10690