- @version V1.0 <描述当前版本功能>
*/
class MainActivity:AppCompatActivity() {
public override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanc
《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
【docs.qq.com/doc/DSkNLaERkbnFoS0ZF】 完整资料开源分享
eState)
setContentView(R.layout.activity_main)
initViews()
}
private fun initViews() {
text1.click{
val intent = Intent(this@MainActivity, Demo4ExtrasDelegateActivity::class.java)
val u = User(“Tony”,“123456”)
intent.putExtra(“user”,u)
intent.putExtra(“string”,“just a test”)
startActivity(intent)
}
text2.click {
val intent = Intent(this@MainActivity, Demo4PrefsDelegateActivity::class.java)
startActivity(intent)
}
}
}
这里的click函数,在使用Kotlin高效地开发Android App(二)中已经讲述过,就不在重复讲述。
Demo4ExtrasDelegateActivity接受从MainActivity中传递过来的参数。
import android.os.Bundle
import android.support.v7.app.AppCompatActivity
import com.safframework.delegate.domain.User
import com.safframework.delegate.extras.extraDelegate
import com.safframework.log.L
class Demo4ExtrasDelegateActivity: AppCompatActivity() {
private val user: User? by extraDelegate(“user”)
private val s:String? by extraDelegate(“string”)
public override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
L.json(user)
L.i(s)
}
}
所传递过来的任何对象类型,都可以使用如下的方式获取Extras。只要保证,extra的key正确即可。
private val user: User? by extraDelegate(“user”)
private val s:String? by extraDelegate(“string”)
与Extra类似,SharedPreferences也可以使用属性委托的方式进行封装。
三. infix中缀表达式是一种通用的算术或逻辑公式表示方法,操作符以中缀形式处于操作数的中间。中缀表达式允许我们使用一个单词或字母来当运算符用(其本质还是函数调用),忽略调用的点和圆括号。
Kotlin的中缀表达式,需要满足以下条件:
- 使用infix修饰
- 只有一个参数
- 其参数不得接受可变数量的参数且不能有默认值。
例如:
infix fun Int.add(i:Int):Int = this + i
infix fun Int.加(i:Int):Int = this + i
fun main(args: Array) {
println(5 add 10)
println(5 加 10)
}
执行结果:
15
15
在 Kotlin 中,使用中缀表达式最经典的例子,莫过于使用kxdate来操作日期。 kxdate github地址:https://github.com/yole/kxdate
val twoMonthsLater = 2.months.fromNow
val yesterday = 1.days.ago
等价于:
val twoMonthsLater = 2 months fromNow
val yesterday = 1 days ago
由此可见,中缀表达式能让代码看起来更加接近于自然语言。
四. inlineKotlin 天生支持函数式编程,高阶函数和 lambda 是其一大特色。
使用高阶函数会带来一些运行时间效率的损失:每一个函数都是一个对象,并且都会捕获一个闭包。 即那些在函数体内会被访问的变量。 内存分配(对于函数对象和类)和虚拟调用会引入运行时间开销。
使用 inline 修饰的函数,可以从编译器角度***将函数的函数体复制到调用处实现内联。***
在很多情况下,通过将 Lambda 表达式内联在使用处, 可以消除运行时消耗。
翻看 Kotlin 的 Standard.kt 可以发现它里面的函数 with、apply、run、let 等都使用了 inline。
再举一个例子,对 Closeable 进行扩展,让它支持Java的try-with-resources特性。
inline fun
var closed = false
try {
return block(this)
} catch (e: Exception) {
closed = true
try {
this?.close()
} catch (closeException: Exception) {
}
throw e
} finally {
if (!closed) {
this?.close()
}
}
}
该方法已经在 https://github.com/fengzhizi715/SAF-Kotlin-Utils 中
总结 最后希望大家能有一个好心态,想进什么样的公司要想清楚,并不一定是大公司,我选的也不是特大厂。当然如果你不知道选或是没有规划,那就选大公司!希望我们能先选好想去的公司再投或内推,而不是有一个公司要我我就去!还有就是不要害怕,也不要有压力,平常心对待就行,但准备要充足。最后希望大家都能拿到一份满意的 offer !如果目前有一份工作也请好好珍惜好好努力,找工作其实挺累挺辛苦的。
这里附上上述的面试题相关的几十套字节跳动,京东,小米,腾讯、头条、阿里、美团等公司19年的面试题。把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节。
由于篇幅有限,这里以图片的形式给大家展示一小部分。
。
这里附上上述的面试题相关的几十套字节跳动,京东,小米,腾讯、头条、阿里、美团等公司19年的面试题。把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节。
由于篇幅有限,这里以图片的形式给大家展示一小部分。
[外链图片转存中…(img-eNUA78ok-1640324520698)]
本文已被CODING开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》收录



