Kotlin中变量延迟初始化写法、定义常量的方式以及扩展函数的写法

Kotlin中变量延迟初始化写法、定义常量的方式以及扩展函数的写法

内容来自于学习《第一行代码(第三版)》

对变量的延迟初始化

在实际开发过程中,一个类中如果存在很多的全局变量,为了保证它们能够满足Kotlin的空指针检查的语法标准,不得不做许多非空判断保护才行,如下:

class MainActivity:AppCompatActivity(){
	private var adapter:MsgAdapter?=null

	override fun onCreate(savedInstanceState:Bundle?){
	...
	adapter=MsgAdapter(msgList)
	...
	}

	override fun onClick(v:View?){
	...
	adapter?.notifyItemInserted
	}
}

而当代码中有了越来越多的全局变量实例时,这个问题就会变得越来越明显,到时候就会写大量额外的判空处理代码,只是为了满足kotlin编译器的要求,解决办法就是延迟初始化late init关键字,它可以告诉Kotlin编译器,我会在晚些时候对这个变量进行初始化,这样就不用在一开始的时候将它赋值为null了,代码优化如下:

class MainActivity:AppCompatActivity(){
	private lateinit var adapter:MsgAdapter

	override fun onCreate(savedInstanceState:Bundle?){
	...
	adapter=MsgAdapter(msgList)
	...
	}

	override fun onClick(v:View?){
	...
	adapter.notifyItemInserted(msgList.size-1)
	}
}

所以,当对一个全局变量使用了lateinit关键字时,一定要确保它在被任何地方调用之前已经完成了初始化工作,否则Kotlin将无法保证程序的安全性
另外,我们还可以通过代码来判断一个全局变量是否已经完成了初始化,这样在某些时候能够有效地避免对某一个变量进行初始化操作,优化代码如下:

class MainActivity:AppCompatActivity(){
	private lateinit var adapter:MsgAdapter

	override fun onCreate(savedInstanceState:Bundle?){
	...
	if(!::adapter.isInitialized){
		adapter=MsgAdapter(msgList)
	}
	...
	}

}

::adaper.isinitialized用于判断变量是否已经初始化,如果没有则初始化

Kotlin中定义一个常量的方式

Kotlin中定义常量一般都是在companion、单例类或顶层作用域中使用const关键字声明一个变量,例如:

class test(){
	companion object{
		const val TAG="RightFragment"
	}
}

扩展函数

扩展函数的意思是即使在不修改某个类的源码的情况下,仍然可以打开这个类,向该类添加新的函数
例如我现在需要实现一个统计一段字符串中字母的数量的功能,一般的常规写法是

object StringUtil{
    fun lettersCount(str:String):Int{
        var count=0
        for (char in str){
            if (char.isLetter()) {
                count++
            }
        }
        return count
    }
}

然后调用该方法

    val str="ABC123xyz!@#"
    val count=StringUtil.lettersCount(str)

现在需要将这个函数添加到String类当中,首先编写一个String.kt文件。文件名虽然没有要求,但是为了便于查找最好是向哪个类中添加扩展函数就定义相同的Kotlin文件。当然,扩展函数也可以定义在任何一个现有的类中,不一定非要创建新文件。不过通常来说,最好将它定义成顶层方法,这样可以让扩展函数拥有全局的访问域。然后在String.kt文件中编写如下代码:

fun String.lettersCount():Int{
    var count=0
    for (char in this){
        if (char.isLetter()){
            count++
        }
    }
    return count
}

注意:扩展函数的语法格式如下

fun ClassName.methodName(param1:Int,param2:Int):Int{
	return 0
}

调用该扩展函数

    val str="ABC123xyz!@#"
    val count=str.lettersCount()
SAP Fiori Launchpad是SAP提供的用于展示和访问SAP Fiori应用程序的用户界面。要配置SAP Fiori Launchpad,需要遵循以下步骤: 1. 配置基础设施:首先,您需要确保已经配置了必要的基础设施组件,如SAP Gateway、SAP NetWeaver ABAP前端服务器和SAP Fiori应用程序的后端服务。确保这些组件已正确安装和配置,以便与SAP Fiori Launchpad无缝集成。 2. 配置角色和权限:对于每个用户或用户组,您需要定义相关的角色和权限。这些角色和权限将决定用户在SAP Fiori Launchpad中可见的应用程序和功能。配置这些角色和权限可以通过SAP标准角色或自定义角色来完成,具体取决于您组织的需求。 3. 配置用户界面:您可以根据您的需求自定义SAP Fiori Launchpad的用户界面。您可以添加、删除或调整已安装应用程序的图标和布局。通过设置不同的目标映射和目录结构,您可以将应用程序组织成逻辑的工作区。 4. 配置主题和风格:SAP Fiori Launchpad的外观和感觉可以自定义。您可以选择不同的主题和风格,以确保SAP Fiori Launchpad的外观与您组织的品牌和风格保持一致。 5. 配置标记和搜索:您可以为SAP Fiori Launchpad的应用程序配置关键字标记和搜索。这样,用户可以更轻松地找到所需的应用程序和内容。 6. 配置URL:针对特定的用户或用户组,您可以设置个性化的SAP Fiori Launchpad URL。通过配置不同的URL,您可以为用户提供定制的访问路径,以便他们可以更直接地访问所需的应用程序和内容。 通过完成以上配置步骤,您就可以成功地配置SAP Fiori Launchpad。它将成为您组织内部使用SAP Fiori应用程序的中心化交互界面,并为用户提供简化的体验和更高的工作效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值