jdk1.8新特性简要说明

1.前言

这里面的内容,主要也是对jdk1.8的内容进行简要的说明。希望现在屏幕前的你能简单的了解到相对应的jdk1.8的内容信息

PS:注意,目前观察,发现JDK1.8的特性,并不是一个个独立的特点,而是在一个点上,一步又一步的静进。因此,如果你尚不理解之前的内容,那么请不要直接跳跃到下一个节点的内容。

2.匿名函数

要使用对应匿名函数的条件

  1. 对象必须是接口
  2. 接口只允许只有一个未编写的函数接口 , 允许拥有对应的default的方法
//目标仅仅只能为接口,不允许为抽象类
public interface   MahincheTwo {
    public  int add( int x , int y); // 对应的匿名方法
    public default int reduce( int x , int y){ // 允许拥有对应的 reduce
        return x - y;
    }
}
//匿名函数方式来直接进行获取对应的信息
MahincheTwo machineTwo =  (x , y) -> x + y + 1;

3.函数式接口

如果,你暂时无法理解 函数式接口 这五个字的含义是什么 . 你可以把他们先看成接口,然后再把他们看成匿名函数规范接口

Comsumer < T >: 接受一个类型的参数,但是并不返回对应的结果值.

@FunctionalInterface
public interface Consumer<T> {
	void accept(T t); //仅仅接受一个参数,但是并不会对参数进行返回的值
}

Function<T,M>: 可以理解为Consumer的精进类型,一样同样仅仅是接受一个参数,差别只在于会得到一个返回值的结果。T类型代表参数的类型,M代表返回值的类型

@FunctionalInterface
public interface Function<T, M> {
	R apply(T t); //接受一个参数,但是会得到对应的参数结果
}

BiFunction<T,M,K>: 可以理解为BiFunction的精进类型,差别只在于接受参数的数量为两个 。

@FunctionalInterface
public interface BiFunction<T, U, R> {
	R apply(T t, U u);
}

Supiler< T > : 这个类型并不与其他类型相关,他则是得到对应的object 。 得到对应的T的类型信息
我们可以将其看做如此,在obj上外套了一层外壳。他可以

@FunctionalInterface
public interface Supplier<T> {

    /**
     * Gets a result.
     *
     * @return a result
     */
    T get();
}

3.2 Optional 容器

Optional< T > : 如果仅仅只是从使用角度来看待问题的话,optional 与 suplier 接口的使用方式其实是一样的。
它的设计出来的角度,也许是以下如此:
在过去的开发之中,我们常常会遇见这样的一个问题。我们得到几个参数的时候,但是,我们并不知道这个参数是不是存在,因此,我们常常会遇见这样解决方案。

public void test( String string ){
	boolean exist = string != null; 
	//我们并不清楚这个参数是否存在,所以我们总有各自各样的方式,去尝试
}

4.方法引用

简单的说,我们上文中所说的函数式接口 . Jdk ,也可以看做Java官方,为上文一部分函数式接口专门的设计了一些特殊的编程方式。主要的主角也是 :: 符号。

如果大家知道C++的话,大家应该不会对这个双引号符号不陌生。他是链接类与方法的关系符号。
因此,Java也是如此,它主要表示类中的方法的关系,就如同映射之中的Method。

  1. Supplier< Class > supplier = Class::Method(类名,xx),效果如同生成实际类。 new ClassA(),并且 内部的构造函数的调用会在使用get之后.类才生成。
  2. targetObj::sayStr(实际深沉类,方法),如同得到目标方法的Method,然后直接调用方法,效果如同映射。
  3. Class::Method(类名,方法),效果如下,主要调用的也是静态方法。

PS:得到的结果,会根据对应方法的参数数量,返回结果的不同而不同,与静态不静态方法并没有关系。如同下文之中的sayStr( String str ) , 参数为1 并且返回结果为void , 因此对应上文之中的 Consumer . 因此使用Consumer。

PPS:由于Void无法替代void,因此不存在Function< String , Void > 等同于 Consumer< String > 这个情况。


public ClassA{
	public static void staticSayStr( String str ){
		System.out.println( str );
	}
	public static String staticSayObject( String strA , String strB){
		StringBuilder builder = new StringBuilder();
		builder.append( strA );
		builder.append( strB );
		return builder.toString();
	}
	public void sayStr( String str ){
		staticSayStr( str );
	}
	
	public ClassA(){
		System.out.println("success new one obj ");
	}
	public static void main( String args[]){
		
		/*
		1.类名::new , 效果如同生成实际类。 new ClassA(); 
		并且 内部的构造函数的调用会在使用get之后,才生成。
		*/
		Supplier<ClassA> classASuppelier = ClassA::new; 
		//调用get()方法之后,ClassA 才成功的生成
		ClassA targetObj = classASupplier.get();
		
		//目标生成类名::方法名,如同得到目标方法的Method,然后直接调用方法,效果如同映射。
		Consumer<String> classFunction =  targetObj::sayStr;
		//目标类名::方法名,也是直接调用对应的方法
		BiFunction<String,String,String> biFunction = ClassA::staticSayObject;
		
		}
}
展开阅读全文
©️2020 CSDN 皮肤主题: 大白 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值