版权声明:本文为xing_star原创文章,转载请注明出处!

本文同步自http://javaexception.com/archives/218

kotlin之变量的可空与非空

上面一篇文章,介绍了kotlin的变量与常量,以及修饰为常量或者是变量的评估标准。本篇文章主要想说的是一个变量的可空与非空。从字面意思上来看,可空就是允许变量的值是null,非空就是不允许变量的值是null。

那么怎么知道一个变量应该被设置为可空的还是非空的呢?

一般而言,对于集合类,比如List或者是MutableList,直接设置为非空类型就好了。比如private var list: MutableList<String> = mutableListOf()

对于普通的Model或者是Android中的View或Fragment,设置为可空就好,它们一般是在后续的程序流程中被赋值的。比如View类,一个TextView或ImageView需要在onCreate()方法体内被赋值,在此之前,是不可能知道它的值的,所以,我们一般这样声明,private var textView: TextView? = null 。 Fragment也是一样的,我们在类的成员变量里面只能做一个申明,具体的赋值,是在Android Activity生命周期方法中,所以,写法是这样的。private var fragment: Fragment? = null。

如果对于普通Model或者是View这样的类型,不想设置为可空,那么也是有办法的,比如委托的方式,以及lateinit的方式。但是一般情况下,还是设置为可空。除非你真的想要非空,才设置为非空类型,非空类型如何声明呢,举个String类型的例子,private var content: String = “hello”

如果大家有真正在生产环境中实践过kotlin的话,那么应该很有感触,会碰到一些别扭的地方,比如textView?.setOnClickListener{//todo} textView?.text = “hello”类似这样的代码块。我们明确的知道textView不会为空,但是由于语法的原因,一旦声明为可空,后面就必须带上?.的判断代码。这个我们再下一篇给出一种解决办法,来规避View的这种问题,将View定义为非空类型。

kotlin相关文章

kotlin之变量与常量 http://javaexception.com/archives/217

kotlin之变量的可空与非空的更多相关文章

  1. MySQL之数据表的插入内容 空与非空(六)

    NULL与NOT NULL mysql> CREATE TABLE tb2( -> usename VARCHAR(20) NOT NULL, -> age TINYINT UNSI ...

  2. java空和非空判断

    public static boolean isEmpty(String str){ if("".equals(str)||str==null){ return true; }el ...

  3. kotlin之变量与常量

    版权声明:本文为xing_star原创文章,转载请注明出处! 本文同步自http://javaexception.com/archives/217 kotlin之变量与常量 最近开始做新产品,于是乎用 ...

  4. 【js】批量判断表单中的文本框非空

    方法一: <script type=”text/javascript”> /* * 批量验证表单非空 * 需要非空验证控件的样式class=”mustadd” */ $(".mu ...

  5. Firebird 列可空非空修改

    2018-12-04 至少到Firebird 3.0.4 已经添加了设置可空 和 非空的语法:如 -- 删除非空(设置为可空) ALTER TABLE TECH ALTER label drop NO ...

  6. MySQL之非空约束(NOT NULL)

    定义: MySQL非空约束(NOT NULL)可以通过 CREATE TABLE 或 ALTER TABLE 语句实现.在表中某个列的定义后加上关键字 NOT NULL 作为限定词,来约束该列的取值不 ...

  7. Javabean非空变量校验工具

    摘要 调研java Class getDeclaredFields() 与getFields()的区别,设计请求参数为Javabean时,基于反射机制校验其中非空变量的公共方法. java Class ...

  8. Kotlin——从无到有系列教程(5): 你该知道的Kotlin可空类型、空安全(null)、类型转换等特性

    在我们熟知的Java中,定义一个变量可以默认不赋值,因为Java的系统会给我们默认赋一个默认值,并且Java可定义一个赋值为null的变量,这样在使用这个变量的时候都会去显示判断该变量是否为null. ...

  9. JS中if判断 非空即为真 非0即为真

    1.字符串参与判断时:非空即为真判断字符串为空的方法if(str!=null && str!=undefined && str !='')可简写为if(!str){   ...

随机推荐

  1. 把一个控制器的view添加到另外一个控制器

  2. zsh: /usr/local/bin/pod: bad interpreter: /System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/bin/ruby: no such file or directory

    系统升级为 macOS Catalina 发现 CocoaPods 不管用了. 解决方法: 打开 iTerm2 sudo gem update --system 输入电脑密码,然后 sudo gem ...

  3. 洛谷上的C语言三连击。

    注意看题目,没有0,一直错. #include<stdio.h> int panduan1(int num1,int num2, int num3); int main(){ int i, ...

  4. Delphi - 手把手教你基于D7+Access常用管理系统架构的设计与实现 (更新中)

    前言 从事软件开发工作好多年了,学的越深入越觉得自己无知,所以还是要对知识保持敬畏之心,活到老,学到老! 健身和代码一样都不能少,身体是革命的本钱,特别是我们这种高危工种,所以小伙伴们运动起来!有没有 ...

  5. hoverdir

    js 引入  jq  &&  modernizr.custom.97074.js  &&jquery.hoverdir.js css 引入style.css html代 ...

  6. universal link使用

    iOS9之后,苹果推出了universal link方案,该方案较url scheme有明显的改善.url scheme很难做到唯一. 而 universal link却是你自己控制的. 1.有一个H ...

  7. 强化学习二:Markov Processes

    一.前言 在第一章强化学习简介中,我们提到强化学习过程可以看做一系列的state.reward.action的组合.本章我们将要介绍马尔科夫决策过程(Markov Decision Processes ...

  8. HDU1217-Arbitrage(乘法最短路)

    Arbitrage is the use of discrepancies in currency exchange rates to transform one unit of a currency ...

  9. 转-友晶Sdram_Control_4Port的全页操作Bug?

    http://www.cnblogs.com/edaplayer/p/3678897.html 以前在学校初学fpga的时候碰到sdram就搞不定了,现在突然发现网上有好多现成的代码,友晶的,alte ...

  10. 【React】在React中 JSX 代码如何转成 JS 代码?

    一.介绍 写 React 代码的朋友应该都是直接写 JSX 代码,JSX 让我们可以在 JS 中直接写 HTML 代码,可阅读性较高.本章节主要介绍 JSX 通过 babel 转换后会生成什么样式代码 ...