我对lateinit和nullable变量感到困惑,哪一个用于变量.
lateinit var c: String
var d: String? = null
c = "UserDefinedTarget"
// if not added initialisation for c than throws UninitializedPropertyAccessException
if (c == "UserDefinedTarget") {
//do some stuff.
}
//not throws any exception whether d is initialise or not.
if(d == "UserDefinedTarget") {
//do some stuff
}
Run Code Online (Sandbox Code Playgroud) 我想传递一个接口作为参数,如下所示:
class Test {
fun main() {
test({})
// how can I pass here?
}
fun test(handler: Handler) {
// do something
}
interface Handler {
fun onCompleted()
}
}
Run Code Online (Sandbox Code Playgroud)
在Java中,我可以使用匿名函数test(new Handler() { .......... })
,但我不能在Kotlin中执行此操作.有人知道怎么做吗?
在Android Studio 2.3.2中从Java到Kotlin的转换(在3.0中具有相同的行为)会创建一个新文件并删除之前的文件.所以Git对这种转换一无所知.并且git历史不会保存.在Intellij Idea中一切都很好.IDE只重命名文件,git保存历史记录.如何在Android Studio中执行相同操作.
MutableList
是一个接口,但我不能找到一个类中kotlin
包明确实现它.有没有?此外,我原本期望将一个包范围定义为mutableListOf(varargs)与listOf(varargs)对称.到目前为止,我必须使用java Collections.
我想RestTemplate
在Kotlin中使用Spring ,如下所示:
//import org.springframework.web.client.RestTemplate
fun findAllUsers(): List<User> {
val restTemplate = RestTemplate()
//has error
val ret = List<User>.javaClass
return restTemplate.getForObject(URI(hostAddress), ret)
}
Run Code Online (Sandbox Code Playgroud)
该RestTemplate.getForObject(URI url, Class<T> responseType)
有这个签名,我从得到这个错误"未解决的参考序列" List
在val ret = List<User>.javaClass
.
如果我这样使用,val ret = List<User>::class.java
我会收到此错误"只允许类在类文字的左侧"
有什么问题?这样做的正确方法是什么?这是一个错误吗?
我有一个通用类型的类Builder<T>
,它接受一个构造函数参数,Class<T>
所以我可以保持类型.这是我在java代码中经常使用的类,所以我不想更改签名.当我尝试使用这样的构造函数时:
Builder<List<Number>>(List<Number>::class)
我收到一个错误:"只允许类在类文字的左侧"
有什么办法解决这个问题?我无法更改构造函数Builder
,太多的java类依赖它.
我理解整个类型的擦除问题,我真的只是想让编译器开心.
如果我有一张这样的清单
var foo = mutableListOf("John", "Wayne")
Run Code Online (Sandbox Code Playgroud)
如果我想在列表顶部添加一个元素,到目前为止我正在考虑两个选项。
第一的:foo.add(0, "Twyla")
第二:foo = (mutableListOf("Twyla") + foo).toMutableList()
我不知道上述两种选择在性能方面的表现如何,但一般推荐的方法是什么?
LogManager
class有两种方法:GetLogger
和GetCurrentClassLogger
,带有重载参数Type loggerType
public static Logger GetLogger(string name, Type loggerType)
public static Logger GetCurrentClassLogger(Type loggerType)
Run Code Online (Sandbox Code Playgroud)
文档说明loggerType
'要创建的记录器的类型.该类型必须从NLog.Logger继承.
这种超载的目的是什么?为什么我需要创建继承类型的记录器?
我正在做练习,我发现我可以使用takeWhile()
和filter()
方法获得相同的结果,所以我想知道何时必须使用其中一种.
谢谢你,欢迎任何想与我分享的消息来源.