使用java8我们知道使用ZoneId.default()
可以获得系统默认值ZoneId
,但如何获取默认值ZoneOffset
?
我看到一个ZoneId
有一些"规则",每个规则都有一个ZoneOffset
,这意味着一个ZoneId
可能有一个以上ZoneOffset
吗?
有什么区别:
fun <T, R> List<T>.map1(transform: (T) -> R): List<R> {
return this.map(transform)
}
Run Code Online (Sandbox Code Playgroud)
和
fun <T, R> List<T>.map2(transform: (T?) -> R): List<R> {
return this.map(transform)
}
Run Code Online (Sandbox Code Playgroud)
和
fun <T, R> List<T?>.map3(transform: (T?) -> R): List<R> {
return this.map(transform)
}
Run Code Online (Sandbox Code Playgroud)
在我的测试中,null
被接受了上述所有3个变换功能,所以:有什么区别T
和T?
?
例如:
fun f(func: () -> Any?)
Run Code Online (Sandbox Code Playgroud)
参数func表示返回Any的函数?类型.但是如何使func可以为空呢:
fun f( (func: () -> Any?)? )
Run Code Online (Sandbox Code Playgroud) 考虑这个非扩展函数:
fun checkArguments(expression: Boolean) {
if (!expression) {
throw IllegalArgumentException()
}
}
Run Code Online (Sandbox Code Playgroud)
当我在kotlin和java中使用这个函数时,我可以看到它的参数名称:expression
。
我还可以将相同的功能编写为扩展函数:
fun Boolean.checkArguments() {
if (!this) {
throw IllegalArgumentException()
}
}
Run Code Online (Sandbox Code Playgroud)
当我以这种方式将其编写为扩展函数时,调用它的布尔值的参数名称(this
函数内的变量,又称接收器)显示为$this$checkArguments
。如何为此参数添加 KDoc 文档注释?使用@param $this$checkArguments
似乎没有记录它。
例如:
fun test() {
val s: String? = ""
check(s != null)
// Error: Only safe (?.) or non-null asserted (!!.) calls are allowed on a nullable receiver of type String?
s.subSequence(0, 1)
}
inline fun check(expression: Boolean) {
if (!expression) {
throw IllegalArgumentException()
}
}
Run Code Online (Sandbox Code Playgroud)
该check
功能inline
,所以它是一样的:
fun test() {
val s: String? = ""
//check(s != null)
if (!(s != null)) {
throw IllegalArgumentException()
}
// It worked!
s.subSequence(0, 1)
}
Run Code Online (Sandbox Code Playgroud)
顺便说一下,即使使用contract,!= null
也可以,但是 …
不使用file.list()
或Files.list(path)
,如何计算目录中的文件编号?
我只想要一个数字,没有细节。请给我一个快速的方法。