Tag: Java

如何在IntelliJ IDEA中禁用“将Java转换为Kotlin”?

当IntelliJ IDEA检测到我将一段复制的Java代码粘贴到一个Kotlin文件中时,它提供给我将粘贴的Java转换为Kotlin。 这个对话框包含一个“不要再次询问下一次”checkbox。 我选中了这个框,并选择“是”,但现在我想撤消我的默认选择。 我该怎么做呢? 我在IntelliJ IDEA的首选项中查找和搜索过,但还没有find相应的checkbox。 它实际上是在设置,还是我可以以某种方式重置默认checkbox选择?

Kotlin脚本为Gradle配置 – 传递参数不使用扩展名

我在项目中使用Kotlin脚本作为Gradle模块的配置。 我有一个自定义部署插件,在运行时为每个服务器实例配置。 我使用扩展从脚本传递参数插件,因为它是写在gradle文档 。 build.gradle.kts : apply { plugin(DeployPlugin::class.java) } extensions.add(“settingsExtension”, {s: Server -> getSettings(s)}) fun getSettings(cfg: Server) = DeploySettings( //configure it with respect to cfg ) DeployPlugin.kt : val settingsExtension = project.extensions.getByName(“settingsExtension”) as ((Server) -> DeploySettings) val settings = settingsExtension.invoke(currentServer) 我不喜欢这种配置方式是我在每个模块配置添加扩展是样板代码。 除非我执行任务,否则我不知道它是否正确。 有没有其他方法可以将getSettings函数传递给插件代码? 谢谢。

我可以通过在Java代码中使用它们来利用Kotlin的协同程序吗?

我的目标是什么? 我的目标是能够使用Java的Kotlin的Coroutine系统。 我希望能够暂停执行一段时间,然后在给定的时间过去之后在那个位置重新找回。 从Java,我希望能够执行任务,而不是以异步方式暂停执行中间执行,例如: //example 1 someLogic(); pause(3000L); //3 seconds someMoreLogic(); //example 2 while(true) { someContinuedLogic(); pause(10000L); //10 seconds } 我的问题是什么? 正如所料,我能够从Kotlin中完美地执行协程,但是对于Java来说,它变得棘手,因为代码的Java部分立即执行整个块而没有任何暂停,而Kotlin块正确地暂停1,并且然后4秒。 我的问题是什么? 甚至有可能使用Kotlin作为Java协程的主干? 如果是这样,我做错了什么? 下面你可以find显示我如何尝试在Java中使用Kotlin协程的源代码。 KtScript类 abstract class KtScript { abstract fun execute() fun async(block: suspend () -> T): CompletableFuture { val future = CompletableFuture() block.startCoroutine(completion = object : Continuation { override fun resume(value: […]

布局的问题和错误在android应用程序开发使用kotlin

我刚刚进入kotlin,我试图用Android studio 3.0 Canary 2,JRE 1.8.0创建一个基本的计算器。 不幸的是,当我将应用程序安装到手机中时,结果与下图不同 在我的android工作室,设计是这样的 这是我的xml 虽然有第二个问题, 我试图输入数字字段,当我点击+(添加)按钮,它立即崩溃。 这是错误 FATAL EXCEPTION: main Process: com.example.jeffrey.kotlincalculator, PID: 20432 java.lang.NumberFormatException: Invalid int: “” at java.lang.Integer.invalidInt(Integer.java:138) at java.lang.Integer.parseInt(Integer.java:358) at java.lang.Integer.parseInt(Integer.java:334) at com.example.jeffrey.kotlincalculator.MainActivity.getNum1(MainActivity.kt:42) at com.example.jeffrey.kotlincalculator.MainActivity$onCreate$1.onClick(MainActivity.kt:24) at android.view.View.performClick(View.java:5207) at android.view.View$PerformClick.run(View.java:21177) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5438) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:739) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:629) 这显然表明INT是一个错误。 这是我的MainActivity代码。 package […]

Java / Kotlin:为什么Jackson解析日期与SimpleDateFormat不同?

我确定这是某种forms的用户错误,但我不能搞清楚我做错了什么。 我有一个Kotlin数据类,这个类的构造方法如下: data class CronEvent( @JsonFormat( shape = JsonFormat.Shape.STRING, pattern = “yyyy-MM-dd’T’HH:mm:ss’Z'” ) @JsonProperty(“time”) val time: Date ) 这被ObjectMapper填充,接受一个json字符串作为有效载荷。 对于我的unit testing,我有一个SimpleDateFormat对象,我用相同的模式实例化。 val jsonStream = CronEventTests::class.java.classLoader.getResourceAsStream(“CronEventPayload.json”) val cronEvent = jsonStreamToCronEvent(jsonStream) // … val simpleDateFormat = SimpleDateFormat(“yyyy-MM-dd’T’HH:mm:ss’Z'”) val expectedDate = simpleDateFormat.parse(“2018-01-15T00:48:43Z”) cronEvent.time shouldBe expectedDate 在我的unit testing中加载的json文件( CronEventPayload.json )具有完全相同的日期字符串( 2018-01-15T00:48:43Z ),但我的测试失败。 java.lang.AssertionError: expected: Mon Jan 15 00:48:43 MST […]

将Kotlin添加到现有Java项目会打破Android Studio gradle消息错误

我是Gradle和Android的新手,但是因为我已经把Kotlin添加到了我的项目中,所以我在Android Studio中遇到一个错误,我需要通过Gradle控制台,默认情况下不会给我任何好的堆栈跟踪或路径。 在现在出现错误的Gradle消息视图中,我只能得到 错误:执行任务’:app:kaptDebugKotlin’失败。 内部编译器错误。 查看日志了解更多详情 这是预期的function,因为它似乎在jetbrains示例项目中工作正常。 我的项目Gradle文件 buildscript { ext.kotlin_version = ‘1.1.4-2’ repositories { jcenter() } dependencies { classpath ‘com.android.tools.build:gradle:2.3.3’ classpath “org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version” // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } } allprojects { repositories { jcenter() } } task clean(type: Delete) { delete […]

Kotlin和Java String之间的差异与正则expression式分割

如果我们有一个val txt: kotlin.String = “1;2;3;” 并且想把它分成一个数字数组,我们可以尝试以下方法: val numbers = string.split(“;”.toRegex()) //gives: [1, 2, 3, ] CharSequence.split的结果中包含尾随的空String 。 另一方面,如果我们看Java String ,结果是不同的: val numbers2 = (string as java.lang.String).split(“;”) //gives: [1, 2, 3] 这一次,使用java.lang.String.split ,结果不包括尾随的空String 。 这个行为实际上是给定的相应的JavaDoc: 此方法的工作原理与通过调用给定expression式和极限参数为零的双参数拆分方法一样。 结尾的空字符串因此不包括在结果数组中 。 在Kotlin的版本中, 0也是这里记录的默认limit参数,但是内部Kotlin在调用 java.util.regex.Pattern::split时将0映射为负值-1 。 nativePattern.split(input, if (limit == 0) -1 else limit).asList() 它似乎正在按预期工作,但我想知道为什么语言似乎限制了Java API,因为不再提供0的限制。

使用JUnit运行时,Intellij IDEA不会停止在Kotlin断点处

当试图执行一些Kotlin代码,同时也使用JUnit时,Intellij IDEA将执行代码直到结束,而不是停在断点处。 演示: class Tester { @Test fun shouldBreakpoint() { //Line where threads should suspend: println(“Should Suspend Here”) //Breakpoint added to this line println(“Shouldn’t run this code unless I release above breakpoint”) } } 当点击“Debug Tester”或“Debug shouldBreakpoint”时,不会有断点。 控制台输出两个打印行,没有停在断点处。 如果使用Java编写相同的代码,则调试器将工作: public class Testerino { @Test public void shouldBreakpoint() { System.out.println(“Should Suspend Here”); //Breakpoint added to this […]

是否有任何相当于Java 8 Stream限制function的Kotlin函数?

我试图find符合条件(过滤)的列表中的前两个元素,为此,我已经在kotlin中实现了以下代码片段: val arr = 0 until 20 val res = arr.filter { i -> println(“Filter: $i”) i % 2 == 0 }.take(2) 一切都很好,直到我意识到它通过整个清单过滤,无论是否find了这两个元素。 利用Java 8流API,它按预期工作。 val res2 = arr.toList().stream() .filter { i -> println(“Filter: $i”) i % 2 == 0 }.limit(2) 所以我的问题是,如果只能使用Kotlin函数来实现。 我知道我可以使用一个简单的循环,但我想使用一个函数式编程aproach。

将@JvmStatic和@JvmField自动应用于Kotlin中的所有文件

我想知道这是否可以通过编译器参数或插件完成。 我有现成的java模块,我转换为kotlin,但它有一堆静态方法/字段。 在某些时候,我想重构一下,但现在我的(Java)这个库的消费者不工作,除非我手动添加缺少@JvmStatic/@JvmField注释伴侣对象字段和方法。 有没有办法自动做到这一点? 谢谢