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

Kotlin入门(11)江湖绝技之特殊函数

因为类的成员函数依赖于类,只有泛型类(又称模板类)才能拥有成员泛型函数,普通类是不允许定义泛型函数的,否则编译器会直接报错。...>的入参,如果要让该方法同时接受源自Number的数组入参,就得定义泛化自Number的泛型函数,即将改为,同时在fun前面添加关键字inline,表示该函数也为内联函数...内联函数在编译之时,会在调用处把该函数的内部代码直接复制一份,调用十次就会复制十份,而非普通函数那样仅仅提供一个函数的访问地址。...= str } 上面的泛型函数兼内联函数setArrayStr,定义的时候稍显麻烦,不过调用的方式没有变化,依旧在函数名称后面补充“”。...比如字符串数组为arrayOf("How", "do", "you", "do", "I'm   ", "Fine"),调用max方法获得的字符串为“you”,而不是长度最长的的那个字符串。

1.2K10

Kotlin学习之路(4)函数的运用

以可变的字符串为例 Java写法“String…args”,而Kotlin中的写法“vararg args:Sting?”,函数内部解析的时候,Kotlin会把可变参数当成一个数组。...【几种特殊的函数】 泛型函数 按照之前的例子,函数的输入参数类型必须定义函数的时候需要指定 例如:var int_array:Array = arrayOf(1,2,3) 定义泛型函数的时候...,只需在函数名称后面加即可 内联函数 前面我们定义的泛型函数appendString时,是把它作为一个全局函数,也就是在类外定义,而不是在类内部定义。...因为类的成员依赖于类,只有泛型类才能拥有成员泛型函数,而普通类是不允许定义泛型函数的,否则编译器直接报错。...//该函数不接收Array也不接收Array fun setArrayNumber(array: Array) { var str

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

    终于搞懂TS中的泛型啦!!

    它允许我们在定义函数、类或接口时使用类型占位符来表示类型,而不直接指定具体的类型。这样,在实际使用时,我们可以传入不同的类型参数,使得代码可以适用于多种情况。..., 表示这是一个泛型函数,T 是一个类型参数,可以是任何类型。...# 基本使用 泛型使用尖括号 来表示,并在定义函数、类或接口时指定类型参数。...示例 2 和示例 3 展示了如何使用泛型函数并指定参数的类型。 。 # 2. 使用泛型变量: 泛型变量允许我们在函数或类中使用一种不确定的类型,而在实际使用时才确定具体的类型。...泛型类型: 泛型类型允许我们创建可以适用于不同类型的变量、函数或类。

    42020

    【Rust 基础篇】在函数和结构体中使用泛型

    本篇博客将详细介绍如何在函数和结构体中使用泛型,包括泛型函数的定义、泛型参数的约束以及泛型结构体的实现。 一、泛型函数 在 Rust 中,我们可以定义泛型函数,它可以适用于多种不同类型的参数。...由于 print 函数是一个泛型函数,它可以适用于不同类型的参数。 泛型参数的约束 有时,我们希望对泛型参数进行约束,以限制可接受的类型。...("Result: {}", result); } 在上述示例中,我们定义了一个名为 add 的泛型函数。函数接受两个相同类型的参数 a 和 b,并返回它们的和。...("Pair: ({}, {})", pair_str.first, pair_str.second); } 在上述示例中,我们定义了一个名为 Pair 的泛型结构体。...由于泛型参数 T 可以代表任意类型,所以可以在结构体中使用不同的类型。 泛型参数的约束 与泛型函数类似,我们也可以对泛型参数进行约束,以限制可接受的类型。

    60030

    Rust学习笔记Day11 类型系统及多态是如何实现的?

    字符串切片,一般用其引用&str,&mut str let s:&str = "hello world"; tuple 元组,固定大小的异构序列,表述为(T,U) ("Hello", 1, false..., map); } Rust编译器可以从上下文中推导出, BTreeMap 的类型 K 和 V 都是字符串引用 &str,所以这段代码可以编译通过。...,再来看下泛型函数,它们的思想是类似的。...在声明一个函数的时候,我们还可以不指定具体的参数或返回值的类型,而是由泛型参数来代替。 看下面这坨例子: id() 是一个泛型函数,它的入参类型是泛型,返回值类型也是泛型。...("{}, {}", int, string); } Rust对于泛型函数,会进行单态化处理。 所谓单态化处理就是在编译的时候,把泛型函数的泛型参数,展开成一系列函数。

    1.1K20

    Kotlin学习日志(四)函数

    这个地方不贴代码,因为我希望有人能敲一边,而不是一味的复制和粘贴,那样是没有用的。 偶次数点击效果图如下 ?...三、特殊函数 3.1 泛型函数 我们先声明几个泛型 var int_array:Array = arrayOf(1,2,3) var long_array:Array...注意到尖括号内部制定了数组元素的类型,这正是泛型的写法“”。由“Array”声明而来的变量可称作泛型变量,至于等号后面的arrayOf*便是泛型函数。...:String{ var str:String = "$tag:" //遍历可变参数中的泛型变量,将其转换为字符串再拼接到一起 for...} tv_result.text = str } 上面的泛型函数兼内联函数setArrayStr在定义的时候比较麻烦,不过外部的调用方式没有发生改变,调用代码如下 var int_array

    1.8K10

    Kotlin Vocabulary | Reified: 类型擦除后再生计划

    泛型对编程语言的类型系统进行了扩展,从而允许一个类型或方法在保证编译时类型安全的前提下,还可以对不同类型的对象进行操作。...但是使用泛型也会有一些限制,比如当您在泛型函数中想要获取泛型所表示类型的具体信息时,编译器就会报错,提示说相关的信息不存在。而 "reified" 关键字,正是为了解决此类问题诞生的。...fun printType(classType: Class) { print(classType::class.java) } 复制代码 这样的代码看起来也没有那么不可接受,但是在 Kotlin...String str = (String)list.get(1); // 需要显示地进行转换和抛出异常 复制代码 为了解决这个问题,Java 从 Java 5 开始支持泛型。...但是,当在泛型函数中需要获取类型信息时,类型擦除的实现方式就显得力不从心了。

    1.3K10

    TypeScript入门秘籍:快速掌握静态类型编程

    `;}const name = "World";console.log(sayHello(name));在这个例子中,我们定义了一个sayHello函数,它接受一个字符串参数name并返回一个字符串。...string:表示字符串。boolean:表示布尔值,即true或false。any:表示任意类型,可以赋值为任何值。unknown:表示未知类型,不能直接赋值给其他变量,除非进行类型断言或类型检查。...// 定义一个泛型函数,用于交换两个变量的值function swap(a: T, b: T): [T, T] { return [b, a];}// 使用泛型函数交换两个数字const [...num1, num2] = swap(10, 20);console.log(num1, num2); // 输出: 20 10// 使用泛型函数交换两个字符串const [str1, str2] =...swap("hello", "world");console.log(str1, str2); // 输出: world hello联合类型和类型保护示例// 定义一个联合类型,可以是字符串或数字function

    13821

    Go: 泛型及其应用详解

    泛型简介 泛型,或称为参数化类型,允许我们在不确定使用什么具体类型时,编写能够适用于多种类型的函数、类型或方法。...泛型函数(Generic Functions):其参数类型或返回类型包含类型参数,能够根据不同的类型参数进行不同的处理。...首先,定义一个泛型函数Reverse,使用类型参数T来代表切片中元素的类型。...当我们看到any时,可以清楚地知道这部分代码是在使用Go 1.18引入的泛型特性,而不是简单地使用空接口来接受任意类型的值。这种区分在读代码和维护代码时非常有帮助。...总结 Go语言中的泛型提供了一种在不牺牲类型安全的情况下编写灵活且可重用代码的方法。通过泛型,我们可以创建出既具有通用性又能适应不同数据类型需求的函数和类型。

    18710

    TypeScript 中的泛型

    泛型(Generics)是一种编程语言特性,允许在定义函数、类、接口等时使用占位符来表示类型,而不是具体的类型。泛型是一种在编写可重用、灵活且类型安全的代码时非常有用的功能。...使用泛型的主要目的是为了处理不特定类型的数据,使得代码可以适用于多种数据类型而不失去类型检查。泛型的优势包括:代码重用: 可以编写与特定类型无关的通用代码,提高代码的复用性。...泛型函数(Generic Functions)使用泛型来创建一个可以处理不同类型的函数:实例function identity(arg: T): T { return arg;}// 使用泛型函数...然后,使用这个泛型接口创建了一个对象 pair,其中 first 是字符串类型,second 是数字类型。3....泛型与默认值可以给泛型设置默认值,使得在不指定类型参数时能够使用默认类型:实例// 基本语法function defaultValue(arg: T): T { return

    14710

    深入浅出TypeScript | 青训营笔记

    泛型 1. 什么时候需要泛型 2. 泛型是什么 泛型(Generics)是一种参数化类型的机制,可以让我们在定义函数、类和接口时,使用一个或多个类型作为参数来指定其返回值或成员的类型。...然后就可以在函数内部或类/接口成员的声明中使用这个泛型类型了。 3....需要注意的是,在使用泛型时,我们还可以对泛型类型参数进行约束,以限制它们只能是某个特定类型或其子类型。...然后定义了一个泛型函数 logLength,它接受一个泛型类型参数 T,但是要求 T 必须满足 extends Lengthwise,也就是说必须具有 length 属性。...最后使用 str、obj 和 num 三个变量分别调用 logLength 函数,可以看到只有 str 和 obj 能够成功输出结果,而 num 因为没有 length 属性而导致编译错误。 4.

    8410

    【译】设计优雅的 Rust 库 API

    (基本上是所有能 deref 到字符串或切片(slice)的类型) 我们可以在更高抽象的层次上应用这个想法:与其使用具体类型作为参数,不如使用拥有严格约束的泛型。...bluss 在 Reddit 上提到可以使用 “去泛型” 技术来规避这个问题:你的(公共)泛型函数只简单地调用另一个(私有)非泛型函数,这样这个私有函数就只会被编译一次。...如果你在设计一个 trait,你也可以为此设计两个功能相同的方法,不同的是一个接受值而另一个接受用于计算出值的闭包。...不要编写一个接受字符串作为参数然后返回一个实例的构造方法,请使用FromStr 为输入参数实现自定义 trait Rust 中实现某种 “函数重载” 的方式是为参数指定一个泛型 trait T,然后对参数的可能的所有类型都实现...例:str::find str::find(p: P) 接受一个Pattern作为输入,char、str、FnMut(char) -> bool 等类型都实现了这个 trait

    1.7K30

    【愚公系列】2021年12月 Typescript-泛型

    文章目录 一、typeScript中的泛型 1、泛型的定义 2、泛型函数 3. 泛型类 4....中的泛型 泛型的定义 泛型函数 泛型类 泛型接口 1、泛型的定义 泛型:软件工程中,我们不仅要创建一致的定义良好的API,同时也要考虑可重用性。...比如:传入number 类型必须返回number类型 传入 string类型必须返回string类型 泛型: 是指在定义函数/接口/类时,不预先指定具体的类型,而在使用的时候再指定类型的一种特性;...泛型类 需求:比如有个最小堆算法,需要同时支持返回数字和字符串 a - z两种类型。...:T,str2:T):boolean{ //void无返回值 return str1==str2; //true/false } f4(123,456) 5.4 泛型在类中的运用

    56020

    Rust学习笔记Day13 怎么用trait实现子类型多态?

    昨天我们一起学习了trait及支持泛型,并通过一个字符串解析的例子练习了一下。 今天我们继续学习下子类型多态。一般来说子类型多态,都是出现在面向对象语言里的。...&self) -> &'static str { "Dog" } } fn name(animal: impl Animal) -> &'static str { animal.name...前面我们学习泛型函数的时候说过泛型函数会被单态化,编译成多个实例, 是静态分派的。 静态分派虽然效率很高,但很多时候,类型可能很难在编译时决定。...如果一个trait的所有方法:其返回值是Self,或携带泛型参数, 就 不能 产生trait Object。...昨天刚提到过泛型函数会在编译时,做单态化,而trait object是运行时的,两者不兼容。

    64330

    TypeScript泛型

    泛型函数泛型函数是一种可以接受不同类型参数的函数。通过使用尖括号 来定义类型参数,并在函数参数、返回值或函数体中使用类型参数,可以实现泛型函数的功能。...函数接受一个参数 value,类型为 T,并返回值也为 T。通过调用 identity 函数并显式指定类型参数,可以传递不同类型的值,得到相应类型的返回结果。泛型类泛型类是一种具有类型参数的类。...类的构造函数接受一个参数 value,类型为 T,并将其赋值给私有属性 value。通过调用 getValue 方法,可以获取存储在容器中的值,其类型为 T。泛型接口泛型接口是一种具有类型参数的接口。...泛型约束有时候我们希望泛型类型参数具有某些特定的属性或方法。为了达到这个目的,可以使用泛型约束(Generic Constraints)。...然后,我们定义了一个泛型函数 getLength,该函数接受一个泛型类型参数 T,并使用泛型约束 T extends Lengthy,表示 T 必须具有 Lengthy 接口中定义的属性。

    50820

    Java泛型

    } 泛型方法会在使用时自动确定泛型类型,比如上我们定义的是类型T作为参数,同样的类型T作为返回值,实际传入的参数是一个字符串类型的值,那么T就会自动变成String类型,因此返回值也是String类型...泛型的界限 不希望用户将泛型指定为除数字类型外的其他类型,我们就需要使用到泛型的上界定义: public class Score { //设定类型参数上界,必须是...我们前面说了,重写的条件是需要和父类的返回值类型和形参一致,而泛型默认的原始类型是Object类型,子类明确后变为其他类型,这显然不满足重写的条件,但是为什么依然能编译通过呢?...public interface Function { R apply(T t); //这里一共有两个类型参数,其中一个是接受的参数类型,还有一个是返回的结果类型 default...中 .ifPresent(s -> System.out.println("字符串长度为:"+s.length())); //如果不为空,则执行这里的Consumer

    14620

    《深入浅出Dart》Dart中的泛型

    现代JavaScript高级小册 深入浅出Dart 现代TypeScript高级小册 Dart中泛型 泛型,一种强大而灵活的编程工具,可以让开发者创建可以适应任何类型的代码,同时又保持类型安全。...这是在许多编程语言中都存在的一种重要的特性,Dart也不例外。在这篇文章中,我们将深入探讨Dart中的泛型。 泛型的概念 在讨论泛型如何在Dart中工作之前,我们首先需要了解什么是泛型。...在List中,泛型参数是int,表示列表只能包含整数。在Map中,有两个泛型参数,String和int,表示这个映射的键是字符串,值是整数。...如果我们试图将非整数类型的值传递给Box,D art将报错,因为Box只接受整数。 创建泛型函数和方法 你可以在函数或方法上使用泛型。...,该函数接受一个特定类型的列表,并返回第一个元素。

    20230
    领券