解释为什么这个字符串比较结果是错误的?

任何人都可以解释为什么下面的代码行结果是错误的。 如果字符串没有大写,代码返回true。 不应该忽略这个案子的意思,结果是一样的吗? System.out.print( String(“Carthorse”.toCharArray().sortedArray()) .equals(String(“Orchestra”.toCharArray().sortedArray()),true) )

ArgumentCaptor vs InOrder来validation后续的回调与不同的参数

我正在测试使用Architecture Components的Room库生成的DAO类。 我想检查加入多个表的查询返回的LiveData是否会在数据更改时更新。 我开始使用InOrdervalidation,但是发现无论我想expression什么论点,Mockito都会说这个方法是用另一个方法调用的(当我把这个断言改为那个时,它会说是另一个) 。 使用一个ArgumentCaptor原来是为了这个目的而正常工作,这是这个问题的主题: 为什么ArgumentCaptorvalidation在这里工作,但InOrder不? 看问题的答案如何validation多个方法调用与不同的参数 ,这两种方法应该工作正常。 下面是我的测试的简化版本,展示了这个问题: package com.example import com.nhaarman.mockito_kotlin.argumentCaptor import com.nhaarman.mockito_kotlin.check import com.nhaarman.mockito_kotlin.mock import org.junit.Assert.assertEquals import org.junit.Test import org.junit.runner.RunWith import org.mockito.Mockito.* import org.mockito.junit.MockitoJUnitRunner @Suppress(“IllegalIdentifier”) @RunWith(MockitoJUnitRunner::class) class MultipleCallbacksVanillaTest { private val java = Language(“Java”) private val javascript = Language(“JavaScript”) private val kotlin = Language(“Kotlin”) private val firstList = emptyList() private val […]

命名条件if-value用于if块

为了限制双重代码实例的数量,我想在if语句中命名variables,就像在for循环中一样。 我的表情: var hours = if (this.substringBefore(“:”).toInt() != 0) {this.substringBefore(“:”) + “h” } {else “”} 我想要的东西是: var hours = if (MY_VAR = this.substringBefore(“:”).toInt() != 0) { MY_VAR + “h” } else { “” } 我主要是写在kotlin,但我很想find其他语言。

如何将List <转换为List ?

我试图从generics方法返回一个特定的列表 代码如下: val list: List = listOf(Animal(1), Animal(2), Animal(7)) val storage = object : Storage { override fun fetch(clazz: Class): List { if(clazz is Animal::class.java){ return list } throw RuntimeException() } } 但是我有一个例外: Error:(14, 20) Kotlin: Type mismatch: inferred type is kotlin.collections.List but kotlin.collections.List was expected 如何正确返回列表?

Kotlingenerics中“*”与“任意”的区别

我不知道我完全理解SomeGeneric和SomeGeneric之间的区别。 我认为“*”代表任何东西(通配符),“Any”代表所有对象inheritance的对象。 所以看起来他们应该是一样的,但他们不是?

尝试在IntelliJ IDEA中运行Kotlin脚本

我正在通过做Kotlin Koans int IntelliJ EduKotlin插件( https://plugins.jetbrains.com/plugin/8186 )来学习Kotlin。 在执行任务并运行它们的情况下,这个插件正在运行,我无法创建新的Kotlin脚本并在没有此插件的情况下运行它。 示例代码在一个名为Hello.kt的文件中: fun hello() : String { return “ok” } 然后,我创建了从“Kotlin脚本”派生的新运行配置,将“工作目录”设置为ProjectName / src文件夹(或ProjectName文件夹,结果相同),然后IDE向我显示“无法find脚本文件:Hello.kt”下面的屏幕: 事实上,在试图运行脚本时,我得到了以下堆栈跟踪: “C:\Program Files\Java\jdk1.8.0_74\bin\java” -Dfile.encoding=windows-1250 -classpath C:\Users\myUser\.IdeaIC2016\config\plugins\Kotlin\kotlinc\lib\kotlin-compiler.jar;C:\Users\myUser\.IdeaIC2016\config\plugins\Kotlin\kotlinc\lib\kotlin-reflect.jar;C:\Users\myUser\.IdeaIC2016\config\plugins\Kotlin\kotlinc\lib\kotlin-runtime.jar org.jetbrains.kotlin.cli.jvm.K2JVMCompiler -script Hello.kt exception: java.lang.RuntimeException: Failed to evaluate script: kotlin.KotlinNullPointerException at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.compileScript(KotlinToJVMBytecodeCompiler.kt:263) at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.compileAndExecuteScript(KotlinToJVMBytecodeCompiler.kt:212) at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:181) at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:49) at org.jetbrains.kotlin.cli.common.CLICompiler.exec(CLICompiler.java:181) at org.jetbrains.kotlin.cli.common.CLICompiler.exec(CLICompiler.java:138) at org.jetbrains.kotlin.cli.common.CLICompiler.exec(CLICompiler.java:57) at org.jetbrains.kotlin.cli.common.CLICompiler.doMainNoExit(CLICompiler.java:248) at org.jetbrains.kotlin.cli.common.CLICompiler.doMain(CLICompiler.java:238) at […]

升级到android gradle插件3.0.0+后,项目不会生成

迁移到Android 3.0后,我已经改变了我的项目中的gradle配置。 在其中一个我尝试构建时遇到错误: Execution failed for task ‘:app:compileDebugKotlin’. e: C:\dev\myapp\app\src\main\kotlin\com\xxxxx\dialog\DeleteConfirmDialog.kt: (35, 46): Too many arguments for public constructor Builder(p0: Context!) defined in android.app.AlertDialog.Builder e: C:\dev\myapp\app\src\main\kotlin\com\xxxxx\dialog\HumidityThresholdDialog.kt: (46, 74): Too many arguments for public open fun getString(p0: String!): String! defined in android.os.Bundle e: C:\dev\myapp\app\src\main\kotlin\com\xxxxx\dialog\PermissionDialog.kt: (45, 50): Unresolved reference: ACTION_APcomICATION_DETAILS_SETTINGS e: C:\dev\myapp\app\src\main\kotlin\com\xxxxx\dialog\PermissionDialog.kt: (53, 22): Unresolved reference: finishAffinity e: […]

问题与Android Studio和主要Activity.kt期待成员声明

我一直在试图通过下面的YouTube教程学习。 我正在使用Android Studio 3.1 Canary,并且在教程中遇到了同样的问题并陷入困境。 例如,如果你在3:30分钟的时候访问这个YouTube教程https://youtu.be/3RMboPhUbmg?t=210 。 当他们输入MaterialSearchView searchView; 它出现了一个红色的下划线,表示“期待成员声明”,无论我尝试多少次搜索,我都找不到答案。 这个错误的解决方案是什么? 谢谢 这是包含在Main2Activity.kt中的代码。 结果应该是调用或知道工具栏和materialsearchview对象 import android.support.v7.app.AppCompatActivity import android.os.Bundle import android.support.v7.widget.Toolbar import com.miguelcatalan.materialsearchview.MaterialSearchView import kotlinx.android.synthetic.main.activity_main2.* class Main2Activity : AppCompatActivity () { **MaterialSearchView searchView;** “expecting member declaration error” **Toolbar toolbar;** “expecting member declaration error” Toolbar toolbar = (Toolbar) view.findViewById(R.id.toolbar); override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main2); toolbar=(Toolbar()) […]

Kotlin的名单缺少“添加”,“删除”等?

在Java中,我们可以做到以下几点 public class TempClass { List myList = null; void doSomething() { myList = new ArrayList(); myList.add(10); myList.remove(10); } } 但是如果我们直接把它改写成Kotlin如下 class TempClass { var myList: List? = null fun doSomething() { myList = ArrayList() myList!!.add(10) myList!!.remove(10) } } 我得到了没有find我的列表中add和removefunction的错误 我将其转换为ArrayList,但这是奇怪的需要投它,而在Java铸造不是必需的。 而这就打破了抽象类List的目的 class TempClass { var myList: List? = null fun doSomething() { myList = […]

如何设置maven kapt的参数

如何使用kotlin-maven-plugin在maven中设置? 这是gradle脚本: kapt{ arguments { arg(“codegen.output”, project.file(‘src/main/generated’).path) arg(“kapt.kotlin.generated”, project.file(‘src/main/generated’).path) } } 谢谢!