还可以从Android Studio编译和运行:
val greeted = "World".also { println("Hello $it") }
Run Code Online (Sandbox Code Playgroud)
然而,编辑突出显示also并it作为错误,并没有给intellisense提供任何帮助.申请仍然有效,当我去源I可以看到两者的定义apply和also.如何让Android Studio识别also?
我在早期版本中也遇到过这个问题.
是否可以在android java类中使用kotlin扩展?例:
fun String.getSomething(): String {
return "something"
}
Run Code Online (Sandbox Code Playgroud)
然后在Java中使用它:
String someString = "blabla";
someString.getSomething();
Run Code Online (Sandbox Code Playgroud)
这可能吗?
我想编写修改"this"的扩展函数,例如:
var a = false
a.toggle() // now a contains false
Run Code Online (Sandbox Code Playgroud)
要么
var a = 1
a.increment() // now a contains 2
Run Code Online (Sandbox Code Playgroud)
在Kotlin有可能吗?
我可以创建返回修改值的扩展函数,但保留"this"未修改,但我想要更方便!看起来Swift可以做到这一点.
您好我正在使用Android Studio和Kotlin语言创建应用程序,但是无法按下按钮来打开新活动.我在我的xml文件创建的按钮,但我不能找到如何声明它MainActivity.kt以及如何创建一个会带我到新的活动OnClicklistener的科特林语法.我在清单中定义了新活动,我想我只需要有关如何实际从MainActivity.kt切换到secondActivity.kt的语法帮助.任何帮助表示赞赏.
android kotlin android-studio kotlin-extension kotlin-android-extensions
我正在尝试遵循 Kotlin 中 ViewModels 的官方 Android 指南。我从字面上复制粘贴了最简单的官方示例,但语法似乎是非法的。
此部分导致问题:
private val users: MutableLiveData<List<User>> by lazy {
MutableLiveData().also {
loadUsers()
}
}
Run Code Online (Sandbox Code Playgroud)
预览给了我这个错误:
Property delegate must have a 'getValue(DashViewModel, KProperty*>)' method. None of the following functions is suitable.
Run Code Online (Sandbox Code Playgroud)
如果我想启动应用程序,我会收到此错误:
Type inference failed: Not enough information to infer parameter T in constructor MutableLiveData<T : Any!>()
Please specify it explicitly.
Run Code Online (Sandbox Code Playgroud)
我不明白这两个错误和其他具有相同错误的问题似乎是由不同的原因引起的。我的猜测是MutableLiveData().also导致问题的原因,但我不知道为什么。考虑到这是一个官方示例,这很奇怪。
我正在尝试Kotlin并希望为Activity实现一个延迟扩展属性:
/**
* Activity module
*/
val Activity.activityModule: ActivityModule by lazy {
ActivityModule(this)
}
Run Code Online (Sandbox Code Playgroud)
编译器错误:
'this' is not defined in this context
Run Code Online (Sandbox Code Playgroud)
我怎样才能将此作为活动资格?我已经阅读了指南,但无法得到它.this@Activity说这个参考没有得到解决.
Kotlin允许命名一个与现有类相同的函数,例如HashSet初始化函数可以像这样实现:
fun <T> HashSet(n : Int, fn: (Int) -> T) = HashSet<T>(n).apply {
repeat(n) {
add(fn(it))
}
}
Run Code Online (Sandbox Code Playgroud)
使用时,它看起来像一个普通的HashSet构造函数:
var real = HashSet<String>()
var fake = HashSet(5) { "Element $it" }
Run Code Online (Sandbox Code Playgroud)
这应该避免或鼓励,为什么?
我有一个使用以下库的现有Android项目:
我正在尝试添加Kotlin支持,以便我可以将项目慢慢迁移到Kotlin.这就是我所做的.
将其中一个类转换为Kt类并移至 src/main/kotlin/..package..
在源集中添加了kotlin.sourceSets {main.java.srcDirs + ='src/main/kotlin'}
当我进行干净的构建并部署应用程序时,我得到NoClassDefFoundError异常.但是,如果我再次部署它可以正常工作.有什么建议?我在转换的类中没有任何注释,所以我没有应用kapt插件.
注意:我使用的是最新的kotlin 1.0.4.我也禁用了即时运行.
我正在考虑在一个文件中为String 添加一个全局扩展方法,无论我在哪里使用String,我都可以使用这个扩展.
但我没有找到办法这样做...我现在只是粘贴扩展名.
在A.kt扩展:
class A{
......
fun String.add1(): String {
return this + "1"
}
......
}
Run Code Online (Sandbox Code Playgroud)
在B.kt中这样访问:
class B{
fun main(){
......
var a = ""
a.add1()
......
}
}
Run Code Online (Sandbox Code Playgroud)
我已经试过everyting我可以添加像static和final,但毫无效果.
我的 Parcelable Model 类的代码如下,
@Parcelize
data class Client(
@SerializedName("id")
var id: Int = 0,
@SerializedName("accountNo")
var accountNo: String? = null,
@SerializedName("status")
private val status: Status,
@SerializedName("active")
private val active: Boolean?,
@SerializedName("activationDate")
var activationDate: List<Int> = ArrayList(),
@SerializedName("dateOfBirth")
var dobDate: List<Int> = ArrayList(),
@SerializedName("clientClassification")
var clientClassification: @RawValue ClientClassification? = null,
@SerializedName("clientType")
var clientType: @RawValue ClientType? = null,
@SerializedName("gender")
var gender: @RawValue Gender? = null,
@SerializedName("groups")
var groups: @RawValue List<Group> = ArrayList()
) : Parcelable
Run Code Online (Sandbox Code Playgroud)
在将此类转换为 Kotlin 之前,Java 代码运行良好。为什么要给空指针,因为我正在初始化数据类的构造函数中的所有 List ?
android parcelable kotlin kotlin-extension kotlin-android-extensions