当前位置: 首页 > news >正文

集约化网站建设情况广州外贸网站开发

集约化网站建设情况,广州外贸网站开发,丹徒网站建设服务,网站做很多关键词对变量延迟初始化 延迟初始化使用的是lateinit关键字#xff0c;它可以告诉Kotlin编译器#xff0c;我会在晚些时候对这个变量进行初始化#xff0c;这样就不用在一开始的时候将它赋值为null了。示例如下#xff1a; class MainActivity : AppCompatActivity() {private …对变量延迟初始化 延迟初始化使用的是lateinit关键字它可以告诉Kotlin编译器我会在晚些时候对这个变量进行初始化这样就不用在一开始的时候将它赋值为null了。示例如下 class MainActivity : AppCompatActivity() {private lateinit var student: Studentoverride fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)student Student(01, 1)student.doHomework()}} 当我们使用lateinit关键字对Student对象进行延迟初始化时我们就不需要像之前章节提到过的一样再对student进行判空处理直接可以调用doHomework方法。 当然当我们使用lateinit关键字也不是没有任何风险的如果我们在student变量还没初始化时调用那么程序还是会崩溃的并且会抛出UninitializedPropertyAccessException异常。 所以当你对一个全局变量使用了lateinit关键字时请一定要确保它在被任何地方调用之前已经完成了初始化工作否则Kotlin将无法保证程序的安全性。 另外我们还可以通过代码来判断一个全局变量是否已经完成了初始化这样在某些时候能够有效地避免重复对某一个变量进行初始化操作示例代码如下 class MainActivity : AppCompatActivity() {private lateinit var student: Studentoverride fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)if (!::student.isInitialized){student Student(01, 1)}student.doHomework()}} 具体语法就是这样 ::student.isInitialized 可用于判断adapter变量是否已经初始化。虽然语法看上去有点奇怪但这是固定的写法。然后我们再对结果进行取反如果还没有初始化那么就立即对adapter变量进行初始化否则什么都不用做。 使用密封类优化代码 首先来了解一下密封类具体的作用这里我们来看一个简单的例子。新建一个Kotlin文件文件名就叫Result.kt好了然后在这个文件中编写如下代码 interface Result class Success(val msg: String) : Result class Failure(val error: String) : Result 这里定义了一个Result接口用于表示某个操作的执行结果接口中不用编写任何内容。然后定义了两个类去实现Result接口一个Success类用于表示成功时的结果一个Failure类用于表示失败时的结果这样就把准备工作做好了。 然后定义一个getMsg()方法代码如下所示 fun getMsg(result: Result) when (result) {is Success - result.msgis Failure - result.errorelse - throw Exception() } getMsg()方法中接收一个Result参数。我们通过when语句来判断如果Result属于Success那么就返回成功的消息如果Result属于Failure那么就返回错误信息。到目前为止代码都是没有问题的但比较让人讨厌的是接下来我们不得不再编写一个else条件否则Kotlin编译器会认为这里缺少条件分支代码将无法编译通过。但实际上Result的执行结果只可能是Success或者Failure这个else条件是永远走不到的所以我们在这里直接抛出了一个异常只是为了满足Kotlin编译器的语法检查而已。 另外编写else条件还有一个潜在的风险。如果我们现在新增了一个Unknown类并实现Result接口用于表示未知的执行结果但是忘记在getMsg()方法中添加相应的条件分支编译器在这种情况下是不会提醒我们的而是会在运行的时候进入else条件里面从而抛出异常并导致程序崩溃。 当然这种为了满足编译器的要求而编写无用条件分支的情况不仅在Kotlin当中存在在Java或者是其他编程语言当中也普遍存在。 不过好消息是Kotlin的密封类可以很好地解决这个问题下面我们就来学习一下。 密封类的关键字是sealed class它的用法同样非常简单我们可以轻松地将Result接口改造成密封类的写法 sealed class Result class Success(val msg: String) : Result() class Failure(val error: String) : Result()fun getMsg(result: Result) when (result) {is Success - result.msgis Failure - result.error } 可以看到代码并没有什么太大的变化只是将interface关键字改成了sealed class。另外由于密封类是一个可继承的类因此在继承它的时候需要在后面加上一对括号。 那么改成密封类之后有什么作用呢你会发现现在getMsg()方法中的else条件已经不再需要了. 并且如果我们现在新增一个Unknown类并也让它继承自Result此时getMsg()方法就一定会报错必须增加一个Unknown的条件分支才能让代码编译通过。 这就是密封类主要的作用和使用方法了。另外再多说一句密封类及其所有子类只能定义在同一个文件的顶层位置不能嵌套在其他类中这是被密封类底层的实现机制所限制的。
http://www.pierceye.com/news/601837/

相关文章:

  • 怎么查看一个网站是用什么程序做的我的家乡湛江网站设计
  • 沈阳网页模板建站开发手机app多少钱
  • 全国建设注册中心网站网页设计师培训价格
  • 做网站地图泰安百度公司代理商
  • 网站后台管理员密码汽车网站更新怎么做
  • 广东省网站备案查询怎么建设网站空间和备案
  • 企业网站软件下载红木家具网站模板
  • 如何创建网站步骤湖北网站制作公司的联系方式
  • 佛山建网站费用seo推广效果怎么样
  • 如何选择网站建设公司永州网页定制
  • 淮北市重点工程建设局网站重庆哪家网站
  • 音乐网站开发背景及意义自定义建设网站
  • 商标设计网站猪八戒宝塔一键wordpress
  • 公司网站用什么开发网站 建设 计划书
  • 安陆市城乡建设局网站w10怎么做信任网站
  • wordpress上站工具内网门户网站
  • 商城网站服务器漳浦建设银行网站
  • 可视化 网站开发工具音乐网站后台管理模板
  • 网站架构功能模块及描述网站聊天怎么做
  • 京东电子商务网站的建设做网站运营需要什么资源
  • 市北建筑建网站哪家好个体户可以做网站吗
  • 怎么建自己的网站?网站优化包括哪些内容
  • 网站后台登录域名国外网站网站app
  • 山西建设工程协会网站wordpress二次元主题个人
  • 加强人社局网站建设获取小程序api
  • 服务器网站备案学生ppt模板免费下载 素材
  • 手机做网站软件运营管理培训
  • 迅博威网站建设南宁 建网站 公司
  • 河北省建设机械协会是正规网站吗网站及网页设计费用
  • 门户网站seo前期铁岭网站建设移动网站