二维数组在Kotlin

你如何在Kotlin中创建2D Int数组? 我试图将此代码转换为Kotlin: int[][] states = new int[][] { new int[]{-android.R.attr.state_pressed}, // not pressed new int[] { android.R.attr.state_pressed} // pressed }; int[] colors = new int[] { foregroundColor, accentColor, accentColor }; ColorStateList myList = new ColorStateList(states, colors); 这是我尝试过的一个尝试,第一个二维数组没有工作,但我得到了一维数组的工作: //This doesn't work: var states: IntArray = intArrayOf( intArrayOf(-android.R.attr.state_pressed), // not pressed intArrayOf(android.R.attr.state_pressed) // pressed ); //This […]

Kotlin RC NoClassDefFoundError

更新kotlin RC-1036后,我面临一个奇怪的问题:我的代码甚至没有编译和打包。 当构建通过和应用程序启动时,我得到了ClassNotFoundException: Didn't find class "example.myapplication.MainActivity" 。 我试图用apktool反编译apk文件,没有找到我的类内的档案。 build/intermediates dir中也没有类。 这是我的项目: app/build.gradle : apply plugin: 'com.android.application' apply plugin: 'kotlin-android-extensions' buildscript { ext.kotlin_version = '1.0.0-rc-1036' repositories { mavenCentral() } dependencies { classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } repositories { mavenCentral() } android { compileSdkVersion 23 buildToolsVersion "23.0.2" defaultConfig { applicationId "example.myapplication" minSdkVersion 21 targetSdkVersion 23 versionCode 1 […]

Kotlin的扩展字段

在Kotlin中编写扩展方法很容易: class A { } class B { fun A.newFunction() { … } } 但有没有办法创建扩展变量? 喜欢: class B { var A.someCounter: Int = 0 }

Kotlin中的TableView回调

我学习使用JavaFX UI控件示例12-12将地图数据添加到表中 它在java中的作品: TableColumn<Map, String> firstDataColumn = new TableColumn<>("Class A"); TableColumn<Map, String> secondDataColumn = new TableColumn<>("Class B"); firstDataColumn.setCellValueFactory(new MapValueFactory(Column1MapKey)); firstDataColumn.setMinWidth(130); secondDataColumn.setCellValueFactory(new MapValueFactory(Column2MapKey)); secondDataColumn.setMinWidth(130); TableView table_view = new TableView<>(generateDataInMap()); table_view.setEditable(true); table_view.getSelectionModel().setCellSelectionEnabled(true); table_view.getColumns().setAll(firstDataColumn, secondDataColumn); Callback<TableColumn<Map, String>, TableCell<Map, String>> cellFactoryForMap = new Callback<TableColumn<Map, String>, TableCell<Map, String>>() { @Override public TableCell call(TableColumn p) { return new TextFieldTableCell(new StringConverter() { […]

Kotlin RxJava可空错误

我使用Kotlin和RxJava在我的Android应用程序中遇到了一个问题。 如下所示。 import rx.Observable data class TestUser(val name: String) fun getTestUser(): Observable<TestUser> { return Observable.just(TestUser("Brian")).flatMap { getUser() } // this compiles } fun getTestUser2(): Observable<TestUser> { val observable = Observable.just(TestUser("Brian")).flatMap { getUser() } return observable // this does not compile } fun getUser(): Observable<TestUser?> { return Observable.just(null) } 在getTestUser2 ,编译器推断最终的返回类型为Observable<TestUser?> ,并且不能编译。 然而,在getTestUser ,代码会进行编译,并且在运行时,当TestUser返回null时,该observable的任何订阅者可能会感到惊讶。 我猜这是在Kotlin和Java之间来回切换的。 但是,编译器可以看到getTestUser2的差异, […]

Kotlin扩展属性在Kotlin脚本中不起作用

var StringBuilder.lastChar: Char get() = get(length – 1) set(value: Char) { this.setCharAt(length – 1, value) } val sb = StringBuilder("Kotlin?") sb.lastChar = '!' println(sb) 当我用kotlinc -script运行这段代码时,编译器会抛出: extensions.kts:3:14: error: unexpected type specification set(value: Char) { 但是,编译时这段代码没有问题。 那么,这是否意味着扩展属性不能在kotlin脚本模式下工作?

Kotlin泛型

在Kotlin中如何为一个方法强制实现一个泛型? 我知道,例如,你可以做到以下几点: var someVar: MutableSet<out SomeType> = hashSetOf() 你怎么能做同样的方法? fun <T> doSomething() { } 我想强制T是X类型或它的子类型。 谢谢。

变量名称前的Kotlin星号运算符或Kotlin中的Spread运算符

我想知道在Kotlin中变量名称前面的星号是什么。 我在Spring引导Kotlin例子中看到了这个( *args ): @SpringBootApplication open class Application { @Bean open fun init(repository: CustomerRepository) = CommandLineRunner { repository.save(Customer("Jack", "Bauer")) repository.save(Customer("Chloe", "O'Brian")) repository.save(Customer("Kim", "Bauer")) repository.save(Customer("David", "Palmer")) repository.save(Customer("Michelle", "Dessler")) } } fun main(args: Array<String>) { SpringApplication.run(Application::class.java, *args) }

Kotlin:接口…没有构造函数

我正在将一些Java代码转换为Kotlin,我不太了解如何实例化Kotlin代码中定义的接口。 作为一个例子,我有一个接口(在Java代码中定义): public interface MyInterface { void onLocationMeasured(Location location); } 然后再在我的Kotlin代码中实例化这个接口: val myObj = new MyInterface { Log.d("…", "…") } 它工作正常。 但是,当我将MyInterface转换为Kotlin时: interface MyInterface { fun onLocationMeasured(location: Location) } 我得到一个错误消息:当我尝试实例化Interface MyListener does not have constructors – 虽然在我看来除了语法之外没有任何变化。 我误解Kotlin中的接口是如何工作的吗?

从Java访问Kotlin扩展函数

有没有可能从Java代码访问扩展函数? 我在Kotlin文件中定义了扩展功能。 package com.test.extensions import com.test.model.MyModel /** * */ public fun MyModel.bar(): Int { return this.name.length() } MyModel是一个(生成的)java类。 现在,我想在我的正常的java代码中访问它: MyModel model = new MyModel(); model.bar(); 但是,这是行不通的。 IDE将无法识别bar()方法,编译失败。 kotlin的静态函数使用了什么工作: public fun bar(): Int { return 2*2 } 通过使用import com.test.extensions.ExtensionsPackage所以我的IDE似乎配置正确。 我搜索了kotlin文档中的整个Java-interop文件,也搜索了很多,但是我找不到它。 我究竟做错了什么? 这甚至有可能吗?