首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Kotlin】空安全 ① ( Kotlin 空安全机制 | 变量可空性 | 默认变量不可空值 | 声明可空类型变量 )

文章目录 一、Kotlin 空安全机制 二、变量可空性 1、默认变量不可空值 2、声明可空类型变量 一、Kotlin 空安全机制 ---- Java 中空指针问题 : 在 Java 语言...编写程序中 , 出现最多崩溃就是 NullPointerException 空指针异常 , 该异常是 运行时 才爆出 , 在 代码编写时 以及 编译期 很难提前排查出来 ; Kotlin 空安全机制...Kotlin 程序 代码健壮性 ; 二、变量可空性 ---- 1、默认变量不可空值 在 Java 中 , 引用类型变量 默认为 null 空值 ; 但是在 Kotlin 中 , 变量默认不可为...null 空值 , 这样所有的 变量 在默认状态下 , 都有一个 默认实例对象 , 从而极大 减少了 空指针异常 出现概率 ; 代码示例 : 先定义一个 name 变量 , 为其赋值字符串 "Tom...默认为非空 , 在 Kotlin 中 不允许将 默认变量 赋值一个空值 , 除非 将该变量声明为 可空类型 ; 2、声明可空类型变量 声明可空类型变量 : 如果要声明一个 可空类型变量 , 必须

1.9K20

JDK 报了一个 P4 Bug,结果居然……

背景 分享一下之前踩一个坑,背景是这样: 我们项目依赖于一个外部服务,该外部服务提供 REST 接口供我方调用,这是很常见一个场景。...new java.net.URL(srcUrl); System.out.println("\nurl result:\n" + getContent(url)); // OK 上面的语句输出正常,结果如下...看看我们程序中用 httpclient 实现,结果发现是有用 java.net.URI,心想,这不至于吧,用 URI 就不行了么。 ? 换 java.net.URI 试试?...(这里不展开讲URL和URI区别联系了,可以简单认为URL是URI一个子集,详细可参考 URI、URL 和 URN[1], wiki URI[2]) 直接通过java.net.URI构造,再调用...经过初步 Review,被认为是一个 P4 Bug,说是 java.net.URL 遵循是 RFC 2396 规范,确实不允许含有下划线 hostname,java.net.URI 做到了,

44120
您找到你想要的搜索结果了吗?
是的
没有找到

JDK 报了一个 P4 Bug,结果居然……

背景 分享一下之前踩一个坑,背景是这样: 我们项目依赖于一个外部服务,该外部服务提供 REST 接口供我方调用,这是很常见一个场景。...new java.net.URL(srcUrl); System.out.println("\nurl result:\n" + getContent(url)); // OK 上面的语句输出正常,结果如下...: url result: Hello, World 看看我们程序中用 httpclient 实现,结果发现是有用 java.net.URI,心想,这不至于吧,用 URI 就不行了么。...(这里不展开讲URL和URI区别联系了,可以简单认为URL是URI一个子集,详细可参考 URI、URL 和 URN[1], wiki URI[2]) 直接通过java.net.URI构造,再调用...经过初步 Review,被认为是一个 P4 Bug,说是 java.net.URL 遵循是 RFC 2396 规范,确实不允许含有下划线 hostname,java.net.URI 做到了,

48520

初学者推荐一个摆脱变量命名纠结神器

在平时工作中,好多程序员都在为变量命名纠结不已,随便命名怕以后看不懂,想好好命名可是自己英文水平又不好,在这个命名上可能需要花费大量时间,会耽误到开发效率,今天推荐一个神器,这个神器可以摆脱变量命名纠结...输入要起名变量,可以是中文或者英文。 点击搜索后,网站会给出变量翻译,下方给出变量起名建议,大家可以copy下变量名,也可以看下用了这个变量源代码,而且可以选择开发语言种类。...点击「Search」就是基于当前命名搜索其它相关命名。 点击「Repo」就是链接到使用该命名代码所在资源库。 点击「Copy」是复制该命名。 点击「Codes」可以查看使用命名示例代码。

1.1K10

Java 已老,Kotlin 或将取而代之?

: 来默认值。 无需提供显式类型声明 Kotlin能够自动推断类型,因此无需显式声明。只需使用val 就可以定义final变量,用var定义普通变量。...无需使用不必要局部变量Kotlin中,try、when等结构其实是带有返回值表达式。例如,可以将try结果变量,这样就无需再创建局部变量了。类似地,when也可以当做表达式使用。...使用is运算符会自动进行类型转换。这样就能避免由于错误类型转换导致异常。...同一个对象内调用序列中,无需再重复类型名 Kotlin提供了with结构以方便反复调用同一个对象方法,这样就无需每次都指明变量名。Java通常采用builder模式和方法链来实现这一点。...扩展现有的JDK类很容易 Kotlin可以通过非常简单方式现有的类增加扩展函数。这是个很强大功能,利用它可以轻松扩展语言核心API。 ▌为什么应该使用Kotlin

1.7K30

你应该知道kotlin实用技巧

Kotlin1.4之前,Kotlin是不支持KotlinSAM转换,只支持Java SAM转换,官方给出解释是:是 Kotlin 本身已经有了函数类型和高阶函数,不需要在去SAM转化。...} } 委托 有时候,完成一些工作方法是将它们委托别人。这里不是在建议您将自己工作委托朋友去做,而是在说将一个对象工作委托一个对象。 当然,委托在软件行业不是什么新鲜名词。...为了实现这一目标,Kotlin 提供了一种将大部分工作委托一个内部 ArrayList 实例并且可以自定义其行为方式,并为此引入了一个关键字: by。 <!...{ return deletedItem } } by 关键字告诉 Kotlin 将 MutableList 接口功能委托一个名为 innerList 内部 ArrayList。...4.在类中定义一些跟回调接口一样名字,但是参数是对应函数类型函数,并且将函数类型赋值当前类对应成员变量

1.5K10

一篇就够——Kotlin快速入门

V7、类型推断和显示类型声明(变量和常量声明) 1、类型推断 在声明一个变量时,我们可以不需要显示声明数据类型,kotlin 会根据你为变量值动态推导出其类型。...当一个变量被赋予了某个类型数值之后,不能再给他其他类型数值,否则,会报 类型错误。...var s="字符串" } 2、显示类型声明 格式: var变量名:变量类型=值 var a:Int=10 3、变量声明注意事项 如果声明变量时就初值,可以不写类型,此时,类型推导将生效 如果声明变量时没有初值...转换为10进制,并复制a } Byte、Int、Long 可以通过上述方式获取最大最小值 String 没有最大最小值,所以没有上述方法 V9、Kotlin函数入门 main() 程序入口 println...else -> 表达式 } 带有返回值When表达式: var result=when(变量){ 分支A -> 表达式(要有返回值,最终将值result) else -> 表达式(

1.5K20

你应该知道kotlin实用技巧

Kotlin1.4之前,Kotlin是不支持KotlinSAM转换,只支持Java SAM转换,官方给出解释是:是 Kotlin 本身已经有了函数类型和高阶函数,不需要在去SAM转化。...} } 委托 有时候,完成一些工作方法是将它们委托别人。这里不是在建议您将自己工作委托朋友去做,而是在说将一个对象工作委托一个对象。 当然,委托在软件行业不是什么新鲜名词。...为了实现这一目标,Kotlin 提供了一种将大部分工作委托一个内部 ArrayList 实例并且可以自定义其行为方式,并为此引入了一个关键字: by。 <!...{ return deletedItem } } by 关键字告诉 Kotlin 将 MutableList 接口功能委托一个名为 innerList 内部 ArrayList。...4.在类中定义一些跟回调接口一样名字,但是参数是对应函数类型函数,并且将函数类型赋值当前类对应成员变量

1.4K00

开心档-软件开发入门之​Kotlin 基本数据类型​

个人主页:iOS程序应用主页​​​​​​ ----前言本章将会讲解 Kotlin 基本数据类型目录Kotlin 基本数据类型字面常量比较两个数字类型转换位操作符字符布尔数组字符串字符串模板----Kotlin...不同于 Java 是,字符不属于数值类型,是一个独立数据类型。...中没有基础数据类型,只有封装数字类型,你每定义一个变量,其实 Kotlin 帮你封装了一个对象,这样可以保证不会出现空指针。...这意味着在不进行显式转换情况下我们不能把 Byte 型值一个 Int 变量。...模板表达式以美元符($)开头,由一个简单名字构成:fun main(args: Array) { val i = 10 val s = "i = $i" // 求值结果

45330

C++ 中有符号类型到无符号类型转换

当我们所值为 负值 时,如以上代码中变量 c 情形,给它一个值 -10,最后将 c d 后输出,得到 d = 246,即 c 变量赋值 -10 后,它值变为 246,这是为什么呢?...这是由于当我们一个无符号类型一个 负值 时,其结果是我们所值与这个无符号类型能表示总个数和,即 d = -10 + 256,这样一来结果当然是 246 了,显然 246 是在此无符号类型所能表示范围内...   当我们一个无符号类型一个超过其表示范围负值时,其最后结果是该负值与该无符号类型所能表示总个数和,如果所得结果还是一个不在此类型表示范围负数,则将所得结果重复以上相加过程,直到最后得到一个在其表示范围数...,此即为最后结果   ( 二 )、 让我们把目光转回到第一个代码片段,将 unsigned char j 一个超出其表示范围内 正值 258 后,将 j k,最后输出 k = 2,即 j...实际上,当我们一个无符号类型一个超出它表示范围 正值 时,结果是将我们所这个值对此无符号类型所能表示总个数取模后余数,即 258 % 256 = 2,符合程序运行结果   ( 三 )、

1.3K00

Kotlin 开发中遇到坑(持续更新)

grade取值为null,而null != -1 ,在kotlin是成立,这就不符合我们实际逻辑了。 解决方法如下:通过 ?: 操作,当mUser等于null时,左边 一个默认值。...对于普通变量来说,不可变( immutable )和只读( read-only )之间没什么区别。因为你没有办法复写一个 val 变量,所以在这时确实是不可变。...,那么当这个变量为 null 时,只会简单抛出一个 KotlinNullPointerException。...json字符串,但是没有包含key为name值,并且注意: 在Person中name类型是String,也就是说是不允许name=null 输出结果: null 是不是有些奇怪,感觉意外绕过了Kotlin...: ""   } } 解决方法是,在子类中用init初始化块将构造函数中获取到属性值继承属性,即: class SpecialPerson(var specialName: String?)

4.3K02

Java基础-day02-基础题

3.变量赋值打印 定义main()方法,请按如下要求编写代码: a) 定义一个byte类型变量v1,初始值; 将v1一个int类型变量v2。...将v2一个long类型变量v3 将v3一个double类型变量v4 b) 打印每个变量值; 具体实现代码 package StudyJavaSE; /** * 3)定义main()方法,...请按如下要求编写代码: * a)定义一个byte类型变量v1,初始值; * 将v1一个int类型变量v2。...* 将v2一个long类型变量v3 * 将v3一个double类型变量v4 * b)打印每个变量值; * @author 奋斗蒙 */ public class BianLiang2...赋值为:88.88 * 定义一个int类型变量v3,将v1强转后赋值v3 * 定义一个int类型变量v4,将v2强转后赋值v4 * 打印v3和v4值,请观察一个浮点型被强转为int型后结果

96160

Kotlin互操作——Kotlin与Java互相调用

当把一个平台值一个Kotlin变量时,可以依赖类型推断(该变量会具有所推断出平台类型,如上例中item所具有的类型),或者选择我们所期望类型(可空或非空类型均可)。...=item//允许,没有问题 Val notNull:String=item//允许,运行时可能失败 如果选择非空类型,编译器会在赋值时触发一个断言,这样可以防止Kotlin非空变量保存空值。...if(aisList)//错误:无法检查它是否真的是一个Int列表 if(aisList)//OK:不保证列表内容 ⑦ SAM转换 就像Java 8一样,Kotlin支持SAM转换,...这意味着Kotlin函数字面值可以被自动转换成只有一个非默认方法Java接口实现,只要这个方法参数类型能够与这个Kotlin函数参数类型相匹配就行。...【例5】将Kotlin变量编译成Java中变量声明。

3.7K10

从点滴基础探究Kotlin独特魅力

fun rgb() = (r * 256 + g) * 256 + b // 枚举类定义一个方法 } 说明: ① 枚举常量在声明时候,必须提供常量属性值. ② 这个例子展示了 kotlin...,后面就不再需要转换它,可以就把它当作你检查过类型使用.实际上编译器进行了类型转换,这种行为称为智能转换. ② 使用 as 关键字来表示到特定类型显示转换. ③ 当你对一个属性进行智能转换时候...[c] = binary // 根据键c把值存储到map中 } for ((letter, binary) in binaryReps) { // 迭代map,把键和值两个变量...在变量名称前加上 前缀 或者 用{ }包围一个表达式,来把值注入到字符串中.③ 值对象类在kotlin中简洁方式表示.④ kotlin if 是带返回值表达式.⑤ when 表达式替代了...java 中 switch ,而且更强大.⑥ 检查过变量具有某种类型之后不必显示地转换类型 : 这就叫 智能转换.⑦ for 在kotlin中更加方便,特别是需要迭代map时候,又或者迭代集合需要下标的时候

2.6K30

Kotlin变量简介 ( 可空类型 | lateinit | 初始化判定 | 非空类型 | !! 与 ? 修饰符 | ?= ?. ?: 运算符 | 抽象属性变量)

Kotlin 变量总结 II . Kotlin 非空变量 III . 非空变量不能空 IV . lateinit 关键字 V . lateinit 初始化判定 VI ....Kotlin 变量总结 ---- 初学 Kotlin , 对变量机制不清楚同学们 , 看完这篇博客基本就对变量定义和使用有清晰认识 ; 1 ....Kotlin 变量分类 : Kotlin变量分为两种 , 非空变量 和 可空变量 , 其中非空变量是困扰广大 Java 开发者一大难题 , 因为 Java 中没有非空变量这个概念 , Kotlin...等操作 , Java 中所有变量都是可空 ; 2 . Kotlin 变量默认状态 : Kotlin变量默认是非空变量 , 默认状态下 , Kotlin 必须进行初始化 ; 3 ....特殊情况 : 如果是非空对象是抽象类中抽象属性 , 那么可以不进行初始化 , 但在其实现中 , 也是必须进行初始化或者延迟初始化 ; III . 非空变量不能空 ---- 1 .

2.4K20

转向Kotlin——数据类和封闭类

数据类和封闭类是Kotlin两种特殊类,今天一起了解一下。 数据类是Kotlin一个语法糖。Kotlin编译器会自动为数据类生成一些成员函数,以提高开发效率。...在开发中,我们经常需要复制一个对象,然后修改它一部分属性,这就需要一个复制机制,Kotlin除了为数据类自动生成toString方法和equals方法,还默认生成了一个copy方法,它作用就是复制数据类实例...所谓解构,就是解除解构,指的是将数据对象中属性提取出来,分别单个变量。...Kotlin编译器会自动为数据类生成组件函数(以后会说到),隐藏,可以直接将数据类成员解构: var js = Person("Js", 20) // 将js.name和js.age分别name和age...变量 var (name, age) = js println("$name, is $age years old") 封闭类 封闭类可以看作是枚举扩展。

92120

Android:关于Kotlin入门语法指南(类、变量 & 函数)都总结在这里了!

今天,carson将主要详细讲解Kotlin基本语法,主要包括: 基本观念(对比于Java) 数据类型 类 变量 & 常量 函数 其他语法糖(控制流、类型检查 & 转换、安全性等) ---- 1....Kotlin 不允许将Array赋值Array,以防止可能运行时失败 ---- 3....自动类型转换 & 判断数据类型 // 1. 自动类型转换 // 在定义变量 / 常量时,若直接赋值,可不指定其数据类型,则能自动进行类型转换。...,变成单表达式函数 fun add(a: Int, b: Int) = a + b; // 调用函数:假设一个类中有一个foo函数方法 User().foo() 4.2 默认参数 // int参数指定默认值为...foo("abc") // 结果: abc 1 // 注:若有默认值参数在无默认值参数前,要略过有默认值参数去无默认值参数指定值,需用命名参数来指定值 // 有默认值参数(int)在无默认值参数

1.3K30

Android:这是一份全面 & 详细Kotlin入门学习指南

Kotlin 中没有 new 关键字 数据类型 & 转换:在Java中通过装箱和拆箱在基本数据类型和包装类型之间相互转换;在Kotlin中,而不管是常量还是变量在声明是都必须具有类型注释或者初始化...Kotlin 不允许将Array赋值Array,以防止可能运行时失败 4.3 类使用 a....,只传无设默认值参数 foo("abc") // 结果: abc 1 // 注:若有默认值参数在无默认值参数前,要略过有默认值参数去无默认值参数指定值,需用命名参数来指定值 // 有默认值参数...c // 若a < b,则返回4c // 类似Java中三元表达式 c = a > b ?...类型检查 & 转换 /** * 1. is * 作用:判断一个对象与指定类型是否一致 **/ // 判断变量a数据类型是否是String var a: Any = "a" if (a is

2.8K20

Carson带你学Android:这是一份全面 & 详细Kotlin入门学习指南

Kotlin 中没有 new 关键字 数据类型 & 转换:在Java中通过装箱和拆箱在基本数据类型和包装类型之间相互转换;在Kotlin中,而不管是常量还是变量在声明是都必须具有类型注释或者初始化...Kotlin 不允许将Array赋值Array,以防止可能运行时失败 4.3 类使用 a....,只传无设默认值参数 foo("abc") // 结果: abc 1 // 注:若有默认值参数在无默认值参数前,要略过有默认值参数去无默认值参数指定值,需用命名参数来指定值 // 有默认值参数...c // 若a < b,则返回4c // 类似Java中三元表达式 c = a > b ?...类型检查 & 转换 /** * 1. is * 作用:判断一个对象与指定类型是否一致 **/ // 判断变量a数据类型是否是String var a: Any = "a" if (a is

2.1K20
领券