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

【Kotlin】类的继承 ② ( 使用 is 运算符进行类型检测 | 使用 as 运算符进行类型转换 | 智能类型转换 | Any 超类 )

文章目录 一、使用 is 运算符进行类型检测 二、使用 as 运算符进行类型转换 ( 智能类型转换 ) 三、Any 超类 一、使用 is 运算符进行类型检测 ---- 在 Kotlin 中 , 如果不确定一个...实例对象的类型 , 可以 使用 is 运算符进行判定 , 使用方法 实例对象 is 判定类型 上述用法可以判定 实例对象 是否是 判定类型 , 如果是 返回 true , 反之 返回 false ;...as 运算符进行类型转换 ( 智能类型转换 ) ---- 将 子类对象 声明为 父类类型 , 如果要 调用 子类 特有的方法 , 必须 使用 as 运算符进行 类型转换 ; 智能类型转换 : 使用 as...运算符进行 类型转换 , 只要进行一次类型转换 , 在后面还要调用子类成员时就可以直接调用 , 不再需要手动转换类型 ; 在下面的代码中 : 父类时 Person 类型 , 子类是 Student 类型...as Student).helloStudent() 在进行第一次转换之后 , 后面 student 对象 可以直接调用 helloStudent 函数 , 不再需要进行先转换类型再调用 , 这就是

1.4K20

鸿蒙高质量代码静态检测200条二

禁止不必要的类型断言@typescript-eslint/no-unnecessary-type-constraint不允许在泛型中使用不必要的约束条件@typescript-eslint/no-unused-expressions...循环而不是标准“for”循环@typescript-eslint/prefer-function-type强制使用函数类型而不是带有签名的对象类型@typescript-eslint/prefer-includes...而不是逻辑运算符@typescript-eslint/prefer-optional-chain强制使用链式可选表达式,而不是链式逻辑与、否定逻辑或、或空对象@typescript-eslint/prefer-readonly...@typescript-eslint/prefer-reduce-type-parameter调用“Array#reduce”时推荐使用类型参数而不是强制转换类型@typescript-eslint/prefer-regexp-exec...#startsWith”和“String#endsWith”而不是其他检查子字符串的等效方法@typescript-eslint/promise-function-async要求任何返回Promise的函数或方法标记为

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

    鸿蒙高质量代码静态检测200条四

    hw-stylistic/comma-spacing强制数组元素和函数中多个参数之间的逗号后面加空格,逗号前不加空格@hw-stylistic/curly条件语句和循环语句的逻辑代码必须写在大括号中@hw-stylistic...强制使用一致的类型声明样式,仅使用“interface”或者仅使用“type”,仅适用于js/ts@typescript-eslint/consistent-type-imports强制使用一致的类型导入风格...函数和类方法需要显式的定义返回类型,仅适用于js/ts@typescript-eslint/explicit-module-boundary-types导出到外部的函数和公共类方法,需要显式的定义返回类型和参数类型...“any”类型,仅适用于js/ts@typescript-eslint/no-loop-func禁止在循环语句内包含不安全引用的函数声明,仅适用于js/ts@typescript-eslint/no-namespace.../no-unsafe-member-access禁止成员访问“any”类型的值,仅适用于js/ts@typescript-eslint/no-unsafe-return函数禁止返回类型为“any”的值,

    8900

    Kotlin实用的语法糖:空安全、类型转换 & 相等性判断

    今天,我将主要讲解,关于Kotlin的一些实用语法糖,主要包括: 范围使用:in、downTo、step、until 类型检查 & 转换:is、智能转换、as 相等性:equals()、== 、 ===...类型检查 & 转换 包括:is、智能转换 和 as /** * 1. is * 作用:判断一个对象与指定的类型是否一致 **/ // 判断变量a的数据类型是否是String var a: Any...智能转换 * 说明: kotlin不必使用显式类型转换操作,因为编译器会跟踪不可变值的is检查以及显式转换,并在需要时自动插入(安全的)转换 **/ var a: Any = "a" if (a...强制类型转换:as **/ var any: Any = "abc" var str: String = any as String // 强制类型转换是不安全的,若类型不兼容则会抛出一个异常 var...可空转换操作符:as? * 作用:null不能转换为String,因该类型不是可空的,此时使用可空转换操作符as?

    1.2K11

    Kotlin实用语法糖:空安全、类型转换 & 相等性判断

    今天,我将主要讲解,关于Kotlin的一些实用语法糖,主要包括: 范围使用:in、downTo、step、until 类型检查 & 转换:is、智能转换、as 相等性:equals()、== 、 ===...类型检查 & 转换 包括:is、智能转换 和 as /** * 1. is * 作用:判断一个对象与指定的类型是否一致 **/ // 判断变量a的数据类型是否是String var a: Any...智能转换 * 说明: kotlin不必使用显式类型转换操作,因为编译器会跟踪不可变值的is检查以及显式转换,并在需要时自动插入(安全的)转换 **/ var a: Any = "a" if (a...强制类型转换:as **/ var any: Any = "abc" var str: String = any as String // 强制类型转换是不安全的,若类型不兼容则会抛出一个异常 var...可空转换操作符:as? * 作用:null不能转换为String,因该类型不是可空的,此时使用可空转换操作符as?

    1K10

    Swift 类型转换

    由于向下类型转换能失败,类型转换操作符就有了两个不同形式。条件形式, as? ,返回了一个你将要向下类型转换的值的可选项。强制形式, as! ,则将向下类型转换和强制展开结合为一个步骤。...如果你不确定你向下转换类型是否能够成功,请使用条件形式的类型转换操作符 ( as? )。使用条件形式的类型转换操作符总是返回一个可选项,如果向下转换失败,可选值为 nil 。...这允许你检查向下类型转换是否成功。 当你确信向下转换类型会成功时,使用强制形式的类型转换操作符( as! )。当你向下转换至一个错误的类型时,强制形式的类型转换操作符会触发一个运行错误。...你不知道遍历时项目的确切类型是什么,所以这时使用条件形式的类型转换符( as?...这里有一个使用 Any 类型来对不同类型进行操作的例子,包含了函数类型以及非类类型。

    1.1K20

    【c++】类型转换

    C语言的类型转换 在C语言中,如果赋值运算符左右两侧类型不同,或者形参与实参类型不匹配,或者返回值类型与接收返回值类型不一致时,就需要发生类型转化,C语言中总共有两种形式的类型转换:隐式类型转换和显式类型转换...显式类型转化:需要用户自己处理 类型相近的才能发生隐式类型转换,如int和double,如果不相关,而对于指针和整型,指针是地址,整型和指针类型之间不会进行隐式类型转换,只能显式的强制类型转换: int...2.dynamic_cast会先检查是否能转换成功,能成功则转换,不能则返回0 向上转型就是我们多态说的切割/切片,是语法天然支持,不需要进行转换,而向下转型语法是不支持的,需要进行强制类型转换...如果父类的指针(或引用)指向的是一个子类对象,那么将其转换为子类的指针(或引用)则是安全的,没有问题 使用C强制类型转换向下转型是不安全的,因为此时无论父类的指针(或引用)指向的是父类对象还是子类对象都会进行转换...使用dynamic_cast向下转型是安全的,如果父类的指针(或引用)指向的是子类对象那么dynamic_cast会转换成功,但如果父类的指针(或引用)指向的是父类对象那么dynamic_cast会转换失败并返回一个空指针

    21720

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

    = -1){ //做一些操作 } 上面代码看上去很简单,定义了一个 User类型的属性mUser,是可以为null的。在if条件中通过判断年级是否等于-1 来做一下操作。...= -1){ //做一些操作 } 1.2.3、is、as 中的坑 obj is String 之后,作用域之中,类型就已经转换了。...如果一个只读的类属性会随着某些条件而变化,那么应当用函数来替代: class Person(val birthDay: DateTime) { fun age(): Int = yearsBetween...4、Gson与Kotlin碰撞出的不安全操作 4.1、使用 data class 没有设置无参构造函数 在 Kotlin 中,不需要自己动手去写一个 JavaBean,可以直接使用 DataClass,...@Parcelize注解实现Parcelable 这里不介绍@Parcelize注解的具体使用,只记录使用过程中遇到的问题。

    4.6K02

    C++中的类型转换

    explicit 三、常见面试题 零、前言 本章主要学习C++的四种类型转换 一、C语言的类型转换 概念及介绍: 在C语言中,如赋值运算符左右两侧类型不同,或者形参与实参类型不匹配,或者返回值类型与接收返回值类型不一致时...,每次使用强制类型转换前,程序员应该仔细考虑是否还有其他不同的方法达到同一目的,如果非强制类型转换不可,则应限制强制转换值的作用域,以减少发生错误的机会。...建议:避免使用强制类型转换 5、explicit explicit关键字阻止经过转换构造函数进行的隐式转换的发生 示例: class A { public : explicit A (...基类必须要有虚函数 对于下行转换,dynamic_cast是安全的(当类型不一致时,转换过来的是空指针),而static_cast是不安全的(当类型不一致时,转换过来的是错误意义的指针,可能造成踩内存...使用特点: cosnt_cast是四种类型转换符中唯一可以对常量进行操作的转换符 去除常量性是一个危险的动作,尽量避免使用 reinterpreter_cast,仅仅重新解释类型,但没有进行二进制的转换

    1.9K20

    泛型编程

    任何编程方法的发展一定是有其目的,泛型也不例外。泛型的主要目的是加强类型安全和减少强制转换的次数。...一个是类型不安全,还有一个是每次使用时都得强制转化。减少类型转换次数比较容易理解,在没有泛型(参数化类型)的时候,装进容器的数据,其类型信息丢失了,所以取出来的时候需要进行类型转换。...这样总能保证类型安全。 Dog是Animal的子类型,那么编译器是否承认Box是Box的子类型,在使用时进行隐式转换呢?...,这样就会导致类型不安全,所以out修饰的参数化类型,只能在函数的返回值上出现。...那么合并两者的好处就变得可行了。 ? 泛型补充 基于最先分析的通过继承的方式进行泛型编程的缺点:1. 太多强制转换 2. 非类型安全。恰当地引入了泛型T,以期编译期的占位和运行时的替换。 ?

    83020

    Java开发编程规范:5.集合处理

    【强制】使用集合转数组的方法,必须使用集合的 toArray(T[] array),传入的是类型完全一样的数组,大小就是 list.size()。...【强制】使用工具类 Arrays.asList()把数组转换成集合时,不能使用其修改集合相关的方法,它的 add/remove/clear 方法会抛出 UnsupportedOperationException...说明:asList 的返回对象是一个 Arrays 内部类,并没有实现集合的修改方法。Arrays.asList 体现的是适配器模式,只是转换接口,后台的数据仍是数组。...【强制】泛型通配符来接收返回的数据,此写法的泛型集合不能使用 add 方法,而不能使用 get 方法,作为接口调用赋值时易出错。...【推荐】使用 entrySet 遍历 Map 类集合 KV,而不是 keySet 方式进行遍历。

    75741

    C++中四种类型转换以及const_cast是否能改变常量的问题

    const限定的目的不是为了修改它的内容 使用const_cast去除const限定,通常是为了函数能够接受这个实际参数 static_cast(expr) 编译器隐式执行的任何类型转换都可以由...static_cast完成 当一个较大的算术类型赋值给较小的类型时,可以用static_cast进行强制转换。...可以将void*指针转换为某一类型的指针 可以将基类指针强制转换为派生类指针,但是不安全。...static_cast会根据父子类指针转换的偏移量转换到正确地址,而reinterpret_cast不会。...dynamic_cast(expr) 执行“安全向下”转型操作,也就是说支持运行时识别指针或所指向的对象,这是唯一个无法用旧式语来进行的转型操作。

    1.4K100

    C++高级主题系列篇

    typeid 运算符时,如果其操作数是一个多态类的指针 2) bad_cast 在用 dynamic_cast 进行从多态基类对象(或引用)到派生类的引用的强制类型转换时,如果转换是不安全的,则会拋出此异常...如果对象所属的类重载了强制类型转换运算符 T(如 T 是 int、int* 或其他类型名),则 static_cast 也能用来进行对象到 T 类型的转换。...} 结果显示: 3) const_cast const_cast 运算符仅用于:进行去除 const 属性的转换,它也是四个强制类型转换运算符中唯一能够去除 const 属性的运算符。...dynamic_cast专门用于将多态基类的指针或引用强制转换为派生类的指针或引用,而且能够检查转换的安全性。对于不安全的指针转换,结果返回 NULL 指针。...C++ 的解决办法是:dynamic_cast 在进行引用的强制转换时,如果发现转换不安全,就会拋出一个异常,通过处理异常,就能发现不安全的转换 3.智能指针 实现原理: 只要将 new 运算符返回的指针

    46920

    阿里Java编码手册实战详解-集合处理篇

    【强制】使用 Map 的方法 keySet()/values()/entrySet()返回集合对象时,不可以对其进行添加元素操作,否则会抛出 UnsupportedOperationException...【强制】使用集合转数组的方法,必须使用集合的 toArray(T[] array),传入的是类型完全一致、长度为 0 的空数组。...【强制】使用工具类 Arrays.asList()把数组转换成集合时,不能使用其修改集合相关的方 法,它的 add/remove/clear 方法会抛出 UnsupportedOperationException...【强制】泛型通配符来接收返回的数据,此写法的泛型集合不能使用 add 方 法,而不能使用 get 方法,作为接口调用赋值时易出错。...【推荐】集合泛型定义时,在 JDK7 及以上,使用 diamond 语法或全省略。 说明:菱形泛型,即 diamond,直接使用来指代前边已经指定的类型。

    93100

    阿里Java编码手册实战详解-集合处理篇

    【强制】使用 Map 的方法 keySet()/values()/entrySet()返回集合对象时,不可以对其进行添加元素操作,否则会抛出 UnsupportedOperationException...【强制】使用集合转数组的方法,必须使用集合的 toArray(T[] array),传入的是类型完全一致、长度为 0 的空数组。...【强制】使用工具类 Arrays.asList()把数组转换成集合时,不能使用其修改集合相关的方 法,它的 add/remove/clear 方法会抛出 UnsupportedOperationException...【强制】泛型通配符来接收返回的数据,此写法的泛型集合不能使用 add 方 法,而不能使用 get 方法,作为接口调用赋值时易出错。...【推荐】集合泛型定义时,在 JDK7 及以上,使用 diamond 语法或全省略。 说明:菱形泛型,即 diamond,直接使用来指代前边已经指定的类型。

    68521

    NumPy 1.26 中文文档(五十七)

    当先前使用 signature 时,对输入的强制转换检查被放宽了,这可能导致不安全地对输入进行降级,特别是如果与 casting="unsafe" 结合使用。 现在强制转换是安全的。...当先前使用signature时,输入的强制检查被放宽,这可能导致不安全的进行输入向下转换,尤其是当与casting="unsafe"结合使用时。 现在保证转换是安全的。...之前使用signature时,输入的强制转换检查会得到放松,这可能导致安全地向下转换输入,特别是与casting="unsafe"一起使用时。 现在强制转换是安全的。...强烈不建议调用ufunc->type_resolver或PyUFunc_DefaultTypeResolver,如果这样做将强制执行标准化的类型元组。...强烈不建议调用ufunc->type_resolver或PyUFunc_DefaultTypeResolver,如果这样做将强制执行标准化的类型元组。

    15210

    【C++从小白到大牛】C++的隐式和显示类型转换基础知识讲解

    1、C语言中的类型转换 在C语言中,如果赋值运算符左右两侧类型不同,或者形参与实参类型不匹配,或者返回值类型与接收返回值类型不一致时,就需要发生类型转化,C语言中总共有两种形式的类型转换:隐式类型转换和显式类型转换...语言和C++中可以相互转换的类型总结 C语言: 整形之间 隐式类型转换 整形和浮点数 隐式类型转换 bool和整形 bool和指针 隐式类型转换 指针和整形 强制类型转换 不同类型的指针之间 强制类型转换...4.1static_cast static_cast对应之前的隐式类型转换,以前的隐式类型转换也能玩,但是建议使用static_cast 但它不能用于两个不相关的类型进行转换 int main() {...下面代码中使用static_cast会报错,因为整形转换成指针是强制类型转换,而static_cast对应的是隐式类型转换,所以我们就要使用reinterpret_cast进行强制类型转换 int main...,能成功则转换,不能则返回0 父类的对象不可能支持强制类型转换为子类,这里向下转换只支持对象的指针/引用 class A { public: // 父类必须含有虚函数 virtual void

    13410

    深入类型系统_TypeScript笔记8

    ,具体如下: 变量或(类)成员初始值 参数默认值 函数返回值 这3类值都能提供直接的类型信息,进而确定目标类型。...),反过来的话是安全的,因为返回值类型相同,参数绰绰有余,msg的类型也兼容(string是any的子类型) 具体的,TypeScript类型系统对函数类型的兼容性判定规则如下: 参数:要求对应参数的类型兼容...):同时满足协变和逆变 不变(invariant或nonvariant):既不满足协变也不满足逆变 协变很容易理解,子类型兼容父类型,此外还具有一些(父类型不具备的)扩展属性或方法,因此用子类型换掉父类型后...所以TypeScript并没有强制约束函数类型逆变,而是允许双变。...,对于未指定类型参数的泛型,就当类型参数是any,再进行比较,例如: let identity = function(x: T): T { //...

    99440

    你不知道的JavaScript(中卷)一

    ,如字符串、数字和布尔值,不会返回对象和函数;“封装”,就是为标量基本类型值封装一个相应类型的对象,但这并非严格意义上的强制类型转换 3.类型转换发生在静态类型语言的编译阶段,而强制类型转换则发生在动态类型语言的运行时...• ||和&&首先会对第一个操作数执行条件判断,如果其不是布尔值就先进行ToBoolean强制类型转换,然后再执行条件判断 4.符号的强制类型转换 • ES6中引入的符号类型Symbol...==允许在相等比较中进行强制类型转换,而===不允许 2.抽象相等 • ES5规范“抽象相等比较算法”定义了==运算符的行为。如果两个值的类型相同,就仅比较它们是否相等。...==在比较两个不同类型的值时会发生隐式强制类型转换,会将其中一或两者转换为相同的类型后再进行比较。注意:NaN!...[]([]==false),0==“\n”(ToNumber会强制转换为0) 4.安全运用隐式强制类型转换 • 如果两边的值中有true或false,千万不要使用== • 如果两边的值中有

    1.2K20
    领券