Kotlin的infix函数
特点infix 关键字可以让 单参数的函数 以 更自然的语法 书写,使代码更易读。你可以把它理解为 一种特殊的调用方式,不需要 . 和 (),让代码像 自然语言 一样流畅。例如mapOf中的键值对(A to B实际等价于A.to(B))省略了 . 和 ()。 条件要使用 infix,需要满足 三个条件: 必须是成员函数或扩展函数(它必须属于某个类或某种类型)。 必须只有且只能有一个参数(如果有多个参数,就不能用 infix)。 ⭐⭐⭐⭐⭐⭐调用时可以省略 . 和 ()(但仍然可以用 . 调用)。 实例12345infix fun <T> Collection<T>.has(element:T)=contains(element)val list =listOf("Apple","Banana","Orange","Pear","Grape")if(list has "Banana"){ //处理具体逻辑}...
手机多媒体(Kotlin)
通知(进阶) 创建通知渠道 12345678910111213val manager=getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){ /*参数介绍: 1.渠道id 2.渠道名称 3.重要等级 */ val channel=NotificationChannel("normal","Normal",NotificationManager.IMPORTANCE_DEFAULT) val channel2=NotificationChannel("important","Important",NotificationManager.IMPORTANC...
泛型和委托
泛型定义泛型类 语法结构 123456//T代指泛型是一种约定俗成class MyClass<T> { fun method(param:T):T{ return param }} 调用 123val myClass=MyClass<Int>() val result=myClass.method(123) println(result) 定义泛型方法 语法结构 12345class MyClass{ fun<T>method(param:T):T{ return param }} 调用 123val myClass=MyClass() val result=myClass.method<Int>(123) println(result) 泛型上界对泛型类型进行限制 语法结构 12345class MyClass{ fun<T:Number>me...
Kotlin内置函数
内置函数 use 可以保证Lambda表达式中的所有代码执行完毕后自动将外层的流关闭,这样就不用再编写finally语句手动关闭了 forEachLine 它会将读取的每行内容回调到Lambda表达式,在lambda中完成拼接逻辑 arrayOf 用于便捷创建数组 by lazy 懒加载技术,可以先不执行,第一次调用时再执行其中的逻辑
探究ContentProvider(Kotlin)
运行时权限权限机制 分类 普通权限和危险权限(还包括一些特殊权限但使用不多,不参与讨论) 危险权限 特点 普通权限直接在AndroidManifest.xml中声明即可 危险权限需要进行运行时权限处理 原则上用户一旦同意某一个权限申请,同组的其它权限会自动授权,但不要基于此规则来实现任何逻辑功能 运行时申请权限1.在AndroidManifest.xml中声明权限 1<uses-permission android:name="android.permission.CALL_PHONE"/> 2.检查权限是否授权 123456if (ContextCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) { // 修正权限请求的字符串格式 ActivityCompat.requestPermissions(this, arrayO...
Kotlin高阶函数的应用
简化SharedPreferences的用法 通过扩展函数方式像其中添加open函数 接收函数类型 12345fun SharedPreferences.open(block:SharedPreferences.Editor.()->Unit){ val editor=edit() editor.block() editor.apply()} 123456//调用getSharedPreferences("data",Context.MODE_PRIVATE).open{ putString("name","Tom") putInt("age",19) putBoolean("married",false)} Android Studio自带扩展可以直接使用: 12345getSharedPreferences("data",Context.MODE_PRIVATE).edi...
数据存储(Kotlin)
文件存储存储数据 通过openFileOutput()得到FileOutputStream对象 借助它构建一个OutputStreamWriter对象在借助这个构建一个BufferedWriter对象 利用BufferedWriter将内容写入文件 1234567891011private fun save(inputText: String) { try { val output=openFileOutput("data",Context.MODE_PRIVATE) val writer=BufferedWriter(OutputStreamWriter(output)) writer.use{ it.write(inputText) } } catch (e: IOException) { e.printStackTrace() ...
Kotlin高阶函数
高阶函数函数类型(String,Int)->Unit 左边是函数接收参数类型,右边是返回值类型 定义含有函数类型的就叫高阶函数 实例1123456789101112131415161718fun num1Andnum2(num1:Int,num2:Int,operation: (Int,Int)->Int):Int{ val result=operation(num1,num2) return result}fun plus(num1:Int,num2:Int):Int{ return num1 + num2}fun minus(num1:Int,num2:Int):Int{ return num1-num2}fun main(){ val num1=100 val num2=50 val result1=num1Andnum2(num1,num2,::plus) val result2= num1Andnum2(num1,num2,::minus) ...
广播机制(Kotlin)
接收系统广播动态注册1234567891011121314151617181920212223242526272829303132333435class MainActivity : AppCompatActivity() { // 声明广播接收器变量 lateinit var timeChangeReceiver:TimeChangeReceiver // 声明视图绑定变量 private lateinit var binding:ActivityMainBinding override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // 初始化视图绑定 binding=ActivityMainBinding.inflate(layoutInflater) setContentView(binding.root) // 创建IntentFilter并...
Kotlin扩展函数和运算符重载
扩展函数语法结构123fun ClassName.methodName(param1:Int,param2:Int):Int{return 0} 实例12345678910//构建扩展函数fun String.lettersCount():Int{ var count=0 for(char in this){ if(char.isLetter()){ count++ } } return count} 12345//调用fun main(){ val cnt="ABC123xyz!@#".lettersCount() println(cnt)} 运算符重载语法结构(可以实现同一个运算符多重重载)12345678910//重载class obj{ operator fun plus(obj:Obj):Obj{ //处理相加的逻辑 ...














