Android kotlin 详解(3)
来源:互联网 发布:mac系统怎么重装win10 编辑:程序博客网 时间:2024/06/06 02:04
在这里,我想给大家推荐一个网站:菜鸟教程 https://www.runoob.com/ ,真心不错的网站,知识点讲的很详细。大部分新的语言都是在上面学的。那,接下来我们进入主题,今天我们这篇博客讲kotlin的泛型,在讲kotlin泛型前,我们先来看看java里面的泛型,不然你很可能蒙圈。
java 泛型知识点:
一. 首先我们要知道,当初java为什么提出泛型了?
(1) 泛型消除源代码中的许多强制类型转换。这使得代码更加可读,并且减少了出错机会。
(2) 泛型提高了 Java 程序的类型安全。
先让我们来看看java泛型的一个例子:
//java一般写法public void printInfo(int a,int b){ System.out.println(a+"/"+b);}public void printInfo(String a,String b){ System.out.println(a+"/"+b);}//java泛型写法public <T> void printInfo(T a,T b){ System.out.println(a+"/"+b);}
二.java泛型的定义
(1)对于 类 的泛型定义:紧跟类名后面。
public class FanXing<T>{};public class FanXing<T extends User>{};
下面来看个例子:
public class FanXing<T> { public T printInfo(String a,String b){ return (T) (a+"/"+b); }}//调用FanXing fanxin=new FanXing<String>();String str=fanxin.printInfo("3","4");
(2)对于 方法 的泛型定义:紧跟修饰符后面
public <T> void printInfo(T a,T b){ System.out.println(a+"/"+b);}
例子,我就里不多说了,上面有这个例子。
三.java通配符(?)
上面有泛型的定义和赋值;当在赋值的时候,上面一节说赋值的都是为具体类型,当赋值的类型不确定的时候,我们用通配符(?)代替。
List<?> unknownList;List<? extends Number> unknownNumberList;List<? super Integer> unknownBaseLineIntgerList;
例子如下:
public void testFunction(){ List<String> list = new ArrayList<String>(); list.add("jim"); list.add("trency"); List<?> list1 = list; //可以读取声明为通配符的集合类的对象 Iterator<?> iterator = list1.iterator(); while(iterator.hasNext()){ System.out.println(iterator.next()); } //不允许向声明为通配符的集合类中写入对象。唯一例外的是null //编译时错误,因为我们不知道 "dcdscd","ntnythyt" 的元素类型。 // list1.add("dcdscd"); //list1.add("ntnythyt"); list1.add(null); }
ps:通配符,赋值时没有给定具体的数据类型。
kotlin 泛型知识点:
**一.**kotlin 泛型的定义
(1)对于 类 的泛型定义:紧跟类名后面
class Genericity <T> class Genericity <T>(t:T)
老规矩,例子走起:
class Genericity <T>{ fun printInfo(a:T,b:T){ println("============== $a + $b") } fun welCome():T{ var str="welcome to kotlin" return str as T; }}//调用 val genericity=Genericity<String>() genericity.printInfo("3","5") genericity.welCome()
(2)对于 方法 的泛型定义:放在 fun 关键字 后面。
fun <T> printInfo(a: T, b: T)fun <T :User> printInfo(a: T, b: T)
例子如下:
class Genericity { fun <T> printInfo(a: T, b: T) { println("============== $a + $b") }}//调用 val genericity=Genericity() genericity.printInfo("3","5") genericity.printInfo(6,7)
(3)kotlin 的协变
Kotlin 中没有通配符类型,它有两个其他的东西:声明处型变(declaration-site variance)与类型投影(type projections)
a.声明处型变
其实,很简单,直接上例子:
// 定义一个支持协变的类class Runoob<out A>(val a: A) { fun foo(): A { return a }}//调用//协变 out 只能作为输出,且只能下转上//何为下转上:String----》Anyvar strCo: Runoob<String> = Runoob("a")var anyCo: Runoob<Any> = Runoob<Any>("b")anyCo = strCo// strCo = anyCo //编译不通过println("======="+anyCo.foo()) // 输出 a-------------------------------------------------// 定义一个支持协变的类class Runoob<in A>(a: A) { fun foo() {//不能有返回值 }}//in 只能作为输入,且只能上转下 var strDCo = Runoob("a") var anyDCo = Runoob<Any>("b") strDCo = anyDCo
ps:
阅读全文
1 0
- Android kotlin 详解(3)
- android kotlin详解(1)
- android kotlin详解(2)
- Android kotlin 详解(4)
- Android Mvp模式详解(Kotlin篇)
- Android——详解Kotlin
- Kotlin for Android(三)Kotlin数据类型
- Kotlin for Android(九)Kotlin集合
- Kotlin Android(一)
- Kotlin开发Android(1):Android studio添加Kotlin
- Kotlin Android 扩展(二)
- Android 权限管理(Kotlin)
- Android AndroidStudio 详解Kotlin的安装和使用(附下载demo)
- Kotlin开发Android笔记3:Kotlin中类与函数
- Kotlin开发Android笔记3:Kotlin中类与函数
- android使用kotlin开发基础(一)之 hello kotlin
- Kotlin基础(一)android studio中配置Kotlin
- Kotlin(一)-->Android Studio配置Kotlin开发环境
- unordered_map和map
- php查出连续一组数字中缺少的那个数字
- 安装rrdtool出现错误:Can't locate ExtUtils/MakeMaker.pm in @INC解决
- Eclipse 安装 SVN 插件的两种方法
- java中静态成员与非静态成员
- Android kotlin 详解(3)
- mysql保存数据提示:Out of range value for column错误
- 代码里不能写 ...... IN ()这种条件,如果参数>1000服务器就会报错,CPU占用会达到100%
- android Seekbar双滑块滑动
- 常见的加密算法
- JS 控制图片在浏览器上幻灯片式自动播放
- 浅谈分布式消息技术 Kafka
- Linux 下cut用法总结
- POJ