首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏韩曙亮的移动开发专栏

    【Kotlin】 ① ( 类 | 参数 | 型函数 | 多参数 | 类型约束 )

    文章目录 一、类 二、参数 三、型函数 四、多参数 五、类型约束 一、类 ---- 定义一个 类 , 将 参数 T 放在 尖括号 <T> 中 , 该参数放在 类名后 下面的代码中 , 声明了 Student 类 , 该类 接收 T 类型参数 , 在主构造函数中接收 T 类型的参数 , 在该类中声明了 T 类型的成员属性 ; class Student Student<Int> = Student(18) println(student2.logT {true}) } 执行结果 : student 实例对象中 , T 的实际类型是 String 类型 , 在 logT 中 R 的类型是 Double 类型 ; student2 实例对象中 , T 的实际类型是 Int 类型 , 在 logT 中 R 的类型是 Boolean 类型 ; 3.14 true 五、类型约束 ---- 在 类 , 型函数 中 , 使用前 , 需要声明 参数 : 参数 声明 : 如果类中 引入了新的类型 , 需要在

    5.1K10编辑于 2023-03-30
  • 来自专栏韩曙亮的移动开发专栏

    【Flutter】Dart ( 类 | 方法 | 特定类型约束的 )

    / 创建类对象 , 类型设置为 int 类型 Cache<int> cache2 = Cache(); // 调用方法时 , 传入的参数必须符合对应的类型 // value2 = cache2.getCachedItem("age"); print("测试, 类型整型, 获取的缓存内容为 ${value2}"); } } 打印结果 : I/flutter , 获取的缓存内容为 ${value}"); // 创建类对象 , 类型设置为 int 类型 Cache<int> cache2 = Cache(); // 调用方法时 , 传入的参数必须符合对应的类型 // 约束 : 使用时会进行类型检查约束 , 如果设置错误的类型 , 编译时报错 cache2.setCacheItem("age", 18 ); // 获取缓存内容 int value2 = cache2.getCachedItem("age"); print("测试, 类型整型, 获取的缓存内容为 ${value2

    8.3K00编辑于 2023-03-28
  • 来自专栏韩曙亮的移动开发专栏

    【Kotlin】总结 ★ ( 类 | 参数 | 型函数 | 多参数 | 类型约束 | 可变参数结合 | out 协变 | in 逆变 | reified 检查参数类型 )

    Student<Int> = Student(18) student2.log() } 执行结果 : item : Tom item : 18 二、参数 ---- 通常情况下 , 参数 Student<Int> = Student(18) println(student2.logT {true}) } 执行结果 : student 实例对象中 , T 的实际类型是 String 类型 , 在 logT 中 R 的类型是 Double 类型 ; student2 实例对象中 , T 的实际类型是 Int 类型 , 在 logT 中 R 的类型是 Boolean 类型 ; 3.14 true 五、类型约束 ---- 在 类 , 型函数 中 , 使用前 , 需要声明 参数 : 参数 声明 : 如果类中 引入了新的类型 , 需要在 (t: T) } 十、 invariant 不变 ---- 在 类 中 , 如果 既将 类型 作为 函数的参数 类型 , 又将 类型 作为 函数的返回值 类型 , 则在 声明 参数

    5.8K11编辑于 2023-03-30
  • 来自专栏泰斗贤若如

    类、方法、类型通配符的使用

                                               类、方法、类型通配符的使用 一.类        类的声明和非类的声明类似,除了在类名后面添加了类型参数声明部分 和方法一样,类的类型参数声明部分也包含一个或多个类型参数,参数间用逗号隔开。一个参数,也被称为一个类型变量,是用于指定一个类型名称的标识符。 类型参数能被用来声明返回值类型,并且能作为方法得到的实际参数类型的占位符。 方法体的声明和其他方法一样。 注意类型参数只能代表引用类型,不能是原始类型(像int,double,char的等) 1 public class GenericMethodTest 2 { 3 // 方法 printArray ,所以name,age,number都可以作为这个方法的实参,这就是通配符的作用 2类型通配符上限通过形如List来定义,如此定义就是通配符值接受Number及其下层子类类型

    6.2K40发布于 2019-06-19
  • 来自专栏Rust语言学习交流

    与关联类型

    与关联类型 和其他我学过的语言相比较,Rust有一些令人费解的概念。 TL;DR: 一个关于何时使用何时使用关联类型的粗略答案是:如果针对特定类型的trait有多个实现(例如From<T>)则使用,否则使用关联类型(例如Iterator 和 Deref)。 (Generic Types) 在trait上下文中, 又被称作类型参数(type parameters),用于在具体实现trait时使用的类型和关联类型最重要的一点是都允许你延迟决定trait类型到实现阶段。即使二者语法不同,关联类型总是可以用来替代实现,但反之则不一定。 不同之处 我们已经看到,和关联类型在很多使用场合是重叠的,但是选择使用还是关联类型是有原因的。

    1.9K20发布于 2020-04-07
  • 来自专栏Java与Android技术栈

    Kotlin 类型擦除

    Java 的优点 是 Java 5 的重要特性之一。的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。 这种参数类型可以用在类、接口和方法的创建中,分别称为类、接口、方法。 Java 通过类型擦除支持 Java 为了兼容性的考虑,采用擦除的机制来支持。 Kotlin 如何获得声明的类型 跟 Java 一样,Kotlin 也是通过类型擦除支持。 但是 Kotlin 的数组支持,因此它们并不会协变。 ,并介绍了如何获得声明的类型

    2.4K30发布于 2019-06-11
  • 来自专栏贾维斯Echo的博客

    Go 类型参数

    Go 之了解类型参数 一、Go 的与其他主流编程语言的差异 Go和其他支持的主流编程语言之间的设计与实现存在差异一样,Go 的与其他主流编程语言的也是不同的。 按照设计方案,如果类型有不止一个类型参数,那么在其声明内部引用该类型名时,不仅要带上所有类型参数,类型参数的顺序也要与声明中类型参数列表中的顺序一致,比如: type P[T1, T2 any] struct { F *P[T1, T2] // ok } 不过从实测结果来看,对于下面不符合技术方案的类型声明也并未报错: type P[T1, T2 any] struct { F *P[T2, T1] // 不符合技术方案,但Go 编译器并未报错 } 5.2 使用类型型函数一样,使用类型时也会有一个实例化(instantiation)过程,比如: var sl 输出:1, 2, 3 } 此外,Go 设计方案支持在类型定义中嵌入类型参数作为成员,比如下面的类型 Lockable 内嵌了一个类型 T,且 T 恰为其类型参数: type Lockable

    1.8K10编辑于 2023-12-24
  • 来自专栏爬坑之路

    Kotlin 类型参数约束

    上一篇文章讲了 Kotlin :基本使用,接下来我们再进一步了解使用相关的进阶知识。本篇是 Kotlin 类型参数约束的讲解,更多内容可点击链接查看。 Kotlin :基本使用Kotlin 类型参数约束系列持续更新中,欢迎关注订阅。 为什么需要类型参数约束在上一篇文章里,我们使用定义了一个列表List<T>,使用这个列表,我们可以在使用的时候,实例化出各种具体类型的列表,比如字符串列表List<String>、整型列表List 它实际上对非数值类型不生效,但它却误导了使用者,引入了潜在问题,也失去了使用的提供的很重要的一个好处:通过编译器在编译期进行类型检查,找出潜在的类型错误,进而保证程序的健壮。 中的属性也同样变得可空,这使得类在具体实现的时候,需要考虑参数为空的情况,也让编写代码的具体实现变得复杂。

    3.9K31编辑于 2023-02-24
  • 来自专栏IT技术订阅

    Java类型擦除问题

    Java类型擦除问题 以前就了解过Java的实现是不完整的,最近在做一些代码重构的时候遇到一些Java类型擦除的问题,简单的来说,Java中所指定的类型在编译时会将其去除,因此List< 因此java只能做到编译期检查的功能,运行期间就不能保证类型安全。 ,但是因为类型擦除,所以实际上获取不到他的类型。 按照以下尝试 通过((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()获取类型,经过测试是获取不到的 第二种是创建spec的子类中使用这个方法就可以获取类型 @Data public abstract static class AbstractSpec<T> { public String

    1.7K20编辑于 2022-06-23
  • 来自专栏C/C++基础

    Golang 实现类型转换

    文章目录 1.前言 2.To String 3.To Other Type 3. 4.使用示例 5.go-huge-util 参考文献 1.前言 Golang 标准库提供了很多类型转换的函数,如 strconv 包可完成 string 与基本数据类型之间的转换。 2.To String 以 string 为,我们可以这样实现。 , fmt.Errorf("unable to cast %#v of type %T to bool", i, i) } } // ToIntE, ToInt8E, ToInt16E... 3. 最终,我们可以通过完成对上面多个具体类型转换函数的封装。

    4.2K20编辑于 2022-12-30
  • 来自专栏一杯82年的JAVA

    JAVA类型擦除

    的本质是参数化类型,这种参数类型可以用在类、接口和方法的创建中。 是在JAVA 1.5版本中才引入的,它能和以前的版本兼容的原因是信息只存在于代码编译阶段,在进入 JVM 之前,与相关的信息会被擦除掉,即类型擦除。 的定义与使用 根据使用情况可以分为以下三种: 方法 接口 下面是一个常用的类: // 一个类,可以根据需要包装不同结果的返回值 public class Result<T> 通配符 如果在某些场景下我们不关注(或者不那么关注)对象的类型参数,可以使用通配符。 在Java SE 1.5之前,没有的情况的下,通过对类型Object的引用来实现参数的“任意化”,“任意化”带来的缺点是要做显式的强制类型转换,而这种转换是要求开发者对实际参数类型可以预知的情况下进行的

    2.4K40发布于 2019-08-26
  • 来自专栏韩曙亮的移动开发专栏

    【Kotlin】 ③ ( out 协变 | in 逆变 | invariant 不变 | 逆变协变代码示例 | 使用 reified 关键字检查参数类型 )

    作为 函数的返回值 类型 , 则在 声明 参数 类型 时 , 在 参数 前 使用 out 关键字 , 同时 该 类 又称为 生产类 ( 生产接口 ) , 用于生产 类 指定的对象 - 使用 in 关键字 , 可以使 父类对象 赋值给 子类对象 ; 在 类 中 , 如果只将 类型 作为 函数的参数 类型 , 则在 声明 参数 类型 时 , 在 参数 前 类型 作为 函数的返回值 类型 , 则在 声明 参数 类型 时 , 既不使用 in 关键字 , 又不使用 out 关键字 ; 代码示例 : 在下面的接口中 , 类型 即用于作为 返回值 , 中 , 可以将 Producer<FastFood> 类型赋值给 Producer<Food> 类型 // 在 Java 中这种用法不行 val producer2: Producer 中这种用法不行 val producer2: Producer<Food> = FastFoodFactory(); producer2.produce() // II.

    2.8K10编辑于 2023-03-30
  • 来自专栏全栈程序员必看

    C#入门类、集合、方法、约束、委托

    不然 集合和ArrayList的装箱拆箱 常见的类型 类和方法 约束 委托 ###很难理解? 的定义主要有以下两种: 1.在程序编码中一些包含类型参数的类型,也就是说的参数只可以代表类,不能代表个别对象。(这是当今较常见的定义) 2.在程序编码中一些包含参数的类。 2.创建类,可在编译时创建类型安全的集合 3.避免装箱和拆箱操作降低性能,在大型集合中装箱和拆箱的影响非常大. ###常见的类型### 在类型的定义中,出现的每个T(一个展位变量而已叫别的名字也行)在运行时都会被替换成实际的类型参数。 下面是一些基础的类型 1.类 class MyGenericClass<T> { //...... } 2.接口

    3.9K30编辑于 2022-09-14
  • 来自专栏韩曙亮的移动开发专栏

    【Java 用法 ( 类用法 | 方法用法 | 通配符 ? | 安全检查 )

    > 四、安全检查 五、完整代码示例 1、类 / 方法 2、main 函数 一、类用法 ---- 类用法 : 使用时先声明 , 如果不声明 , 则表示该类的是 Object getData2(T arg){ T data = arg; return data; } 指定的方法 : 指定 方法 的类 , 方法 的声明 <String, Integer>getData2("Mouse"); 不指定的方法 : 方法 中 也可以不声明类型 , 传入的参数是 T 类型 , 如果给传入参数设置 String 如果给传入参数设置 String , 隐含将 T 设置为 String 类型 String data2 = student.getData2("Mouse"); 三、通配符 <? <String, Integer>getData2("Mouse"); // 方法 中 也可以不声明类型 // 传入的参数是 T 类型

    12.4K30编辑于 2023-03-29
  • 来自专栏walterlv - 吕毅的博客

    .NETC# 判断某个类是否是类型接口的子类型

    .NET/C# 判断某个类是否是类型接口的子类型 2018-09-01 08:28 .NET 中提供了很多判断某个类型或实例是某个类的子类或某个接口的实现类的方法 本文将提供判断接口实现或类型子类的方法。 所以我们可以充分利用这一点完成类型的判断。 ///

    /// 判断指定的类型 <paramref name="type"/> 是否是指定类型的子类型,或实现了指定接口。 </param> /// <param name="generic">接口类型,传入 typeof(IXxx<>)</param> /// <returns>如果是接口的子类型,则返回

    5.6K20发布于 2018-09-18
  • 来自专栏韩曙亮的移动开发专栏

    【Java 简介 ( 类 | 方法 | 静态方法的 | 类与方法完整示例 )

    类 也可以有参数 , 将 类型 作为 参数 传入类中 ; 接口 : 接口 的 参数 , 也可以是 ; 将 类型 传入 方法 , 类 , 接口 中 , 可以 动态地 指定一些类型 ; 的性能 ; 二、类 ---- 类 : 在 类名后面 使用 <T> 声明 , 则在该类中 , 可以使用该类型 T 类型 ; 特别注意 , 该类中的 如下 2 个方法 不是 方法 , 使用 <T> 声明的方法 , 是方法 ; 将某个类型作为参数传入 ; 个数 : 该方法是方法 , 且指定了 2 , 的个数可以有很多个 , 多个之间 , 使用逗号隔开 , 是将某个类型作为参数传入 * 方法指定 , 写法如下 * * 该方法是方法 * 方法指定了 2 * * 方法指定 , 写法如下 ; * * 该方法是方法 * 方法指定了 2 * 个数 , 的个数可以有很多个

    23.5K30编辑于 2023-03-29
  • 来自专栏Rust入门笔记

    【Rust学习】24_类型

    通过在 impl 后面声明 T 作为一个类型,Rust 就能够识别出 Point 中尖括号内的类型是一个类型,而不是一个具体类型。 我们本可以选择一个与结构体定义中声明的参数不同的名字,但使用相同的名字是符合惯例的。在声明了类型的 impl 块中编写的方法将被定义在任何实例的类型上,无论最终替代类型的具体类型是什么。 为了使示例更清晰,在下面的代码中,我们使用了 X1 和 Y1 作为 Point 结构体的类型,而 X2 和 Y2 用于 mixup 方法的签名。 参数 X2 和 Y2 在 fn mixup 之后声明,因为它们只与方法相关。使用的代码性能您可能对使用类型参数是否会引入运行时性能开销感到好奇。 单态化是将代码转换成特定代码的过程,具体来说,就是在编译时根据实际使用的具体类型来填充类型参数。在这个过程中,编译器会查看所有调用代码的地方,并为这些调用生成具体类型的代码。

    51110编辑于 2025-01-14
  • 来自专栏码农沉思录

    Java如何优雅获取类型

    场景 假设我们定义了一个类,内部有一个数据结构,为 T,当我们输入一个 Json 字符串,想把这个 Json 反序列化成对象,那么此时,我们就需要知道这个类型。 ,但获取类型是在父类。 先说结论:通过 Java 反射包的 ParameterizedType 工具获得具体类型。 Type[] 数组就是该类(我们这里是父类)的,rawType 是原始类型,即 Base 的 Class 类型。而 OwnerType 返回的则是 Base 类型。 Class,获取到数组,返回第一个(因为我们只有一个类型的 Class。

    13.7K30发布于 2018-12-24
  • 来自专栏全栈程序员必看

    擦除)【java基础—-

    1.3 定义(类、方法(方法返回值是的,方法在普通类和类里)): 1.4特点: 对于特点(1)举个例子 : 没有使用时的异常抛出 对于特点(2)访问时不需要类型转换 不能存储基本类型int,double… 5.擦除 5.1 擦除概念: 5.2 由于擦除出现的错误举例: ---- ---- 1.什么是 1.1概念: Java是J2 SE1.5 定义一个方法(不在类里):publilc <T> void testMethod() { } 或定义一个返回值类型的方法(不在类里): public <T> T testMethod2 (所以人家的真心不允许被辜负,就没多态了) 2.类、接口、方法 2.1类 语法:类名<T,……..> 举例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 (也可以加上特点(1)(2)) 3.2类的好处 答:使用类可以解决重复业务的代码的复用问题,也就是业务颗粒的复用,同时使用类型在编译阶段就可以确定,并发现错误,类型的转换都是自动和隐式的

    4.6K51编辑于 2022-11-02
  • 来自专栏Seacahl

    From Java To Kotlin 2:Kotlin 类型系统与终于懂了

    # :让类型更加安全 Kotlin 的与 Java 一样,都是一种语法糖,即只在源代码中有定义,到了class级别就被**擦除**了。 类型安全:可以在编译时检查类型,从而避免了在运行时出现类型不匹配的错误。这可以提高程序的可靠性和稳定性。 2. 代码重用:可以使代码更加通用和灵活,从而可以减少代码的重复和冗余。 在 Java 中,我们常见的有:类、接口、方法和属性,Kotlin 系统继承了 Java 系统,同时添加了一些强化的地方。 ### 接口/类(类型) 定义类型,是在类型名之后、主构造函数之前用尖括号括起的大写字母类型参数指定: ### 声明接口 > Java: ``` //接口 interface in位置,而函数返回类型叫作out位置 #### 协变 :保留子类型化关系 如果在定义的类和方法的参数前面加上out关键词,说明这个类及方法是协变,简单来说类型A是类型B的子类型

    98150编辑于 2023-06-06
领券