lambda表达式和泛型

lambda表达式

面向对象的编程中强调,必须通过对象的形式去做事情,函数式思想则是尽量忽略对象的复制写法,“强调做什么,而不是以什么形式去做”。

lamda表达式就是函数式思想的体现

lamda表达式就是一种定义函数的简化写法,不是函数调用的简化写法

lambda表达式格式

三要素:形式参数,箭头,代码块

形如:(形参)->(代码块)

形参:如果多个参数,参数之间逗号隔开,如果没有参数,得留空括号

->:英文中划线和大于号,固定写法,表示执行

代码块:具体要做的事情

使用前提:有接口:接口当中有且只有一个抽象方法(因为lambda表达式的箭头括号内,没有函数名称参数,所以区分不了那个参数)

泛型

就是一种不确定的数据类型。

泛型类的定义语法
class 类名 <泛型标识 , 泛型标识 , ..... >{
	private 泛型标识 变量名;
}
class GenericDemo<K>{
 //定义数组
 private K[] arr;
}
常用的泛型标识符

T,E,K,V,?

本质上这些个都是通配符,没啥区别,只不过是编码时的一种约定俗成的东西。比如上述代码中的 T ,我们可以换成 A-Z 之间的任何一个 字母都可以,并不会影响程序的正常运行,但是如果换成其他的字母代替 T ,在可读性上可能会弱一些。

?表示不确定的 java 类型T (type) 表示具体的一个java类型K V (key value) 分别代表java键值中的Key ValueE (element) 代表Element

泛型类的使用语法

类名<具体的类型对象> 对象名 =new 类名 <具体的数据类型>()

类名<具体的类型对象> 对象名 =new 类名 <>()

jdk 1.7 之后,后面的<>可以省略不写

GenericDemo<String> genericDemo =new GenericDemo<String>(10);
GenericDemo genericDemo =new GenericDemo(10);
GenericDemo<String> genericDemo =new GenericDemo<>(10);

以上三种写法等价

泛型总结

类型参数化,让类的定义更加通用

泛型不支持基本数据类型,因为在编译时T编译成Object,基本类型无法转换为Object

泛型类在创建对象的时候,如果没有指定具体数据类型,将按照Object类型来操作

同一泛型类在逻辑上可以看成是多个不同的类型,但实际是相同类型

从泛型类派生子类

泛型接口的语法定义:

interface 接口名 <泛型标识1,泛型标识2>{

​ 泛型标识 方式名();

​ …

}

子类也是泛型,子类和父类的泛型要保持一致,如果父类没有指明类型,则父类按照Object类型处理

package com.qcby.demo.generic;

public class Parent<E>{
 private E value;

 public E getValue() {
     return value;
 }

 public void setValue(E value) {
     this.value = value;
 }
}

子类(无论是E还是T,子类是泛型要和父类的一致)

public class Child<E> extends Parent<E>{

}

image-20220519213408488

子类不是泛型,父类要明确泛型类的数据类型,如果父类没有指明类型,则父类按照Object类型处理

public class Child2 extends Parent<String>{
 @Override
 public String  getValue() {
     return super.getValue();
 }
 public static void main(String[] args) {
     Child<String> child =new Child<>();
     child.setValue("123");
     child.getValue();
 }
}
public class Child2 extends Parent{
 @Override
 public Object  getValue() {
     return super.getValue();
 }
 public static void main(String[] args) {
     Child<String> child =new Child<>();
     child.setValue("123");
     child.getValue();
 }
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值