GVKun编程网logo

阶段1 语言基础+高级_1-3-Java语言高级_08-JDK8新特性_第1节 常用函数接口_5_函数式接口作为方法的参数案例

21

本文将为您提供关于阶段1语言基础+高级_1-3-Java语言高级_08-JDK8新特性_第1节常用函数接口_5_函数式接口作为方法的参数案例的详细介绍,同时,我们还将为您提供关于JDK8新特性--常用

本文将为您提供关于阶段1 语言基础+高级_1-3-Java语言高级_08-JDK8新特性_第1节 常用函数接口_5_函数式接口作为方法的参数案例的详细介绍,同时,我们还将为您提供关于JDK8新特性--常用函数接口--函数式接口作为方法的参数案例、JDK8新特性--常用函数接口--函数式接口作为返回值的参数案例、阶段 1 语言基础 + 高级_1-3-Java 语言高级_02 - 继承与多态_第 3 节 接口_10_接口的私有方法使用、阶段 1 语言基础 + 高级_1-3-Java 语言高级_02 - 继承与多态_第 3 节 接口_3_接口的抽象方法定义的实用信息。

本文目录一览:

阶段1 语言基础+高级_1-3-Java语言高级_08-JDK8新特性_第1节 常用函数接口_5_函数式接口作为方法的参数案例

阶段1 语言基础+高级_1-3-Java语言高级_08-JDK8新特性_第1节 常用函数接口_5_函数式接口作为方法的参数案例



分享图片



分享图片


分享图片


分享图片

Lambda

分享图片



分享图片


使用的前提 ,方法的参数必须是一个函数式的接口。
优化版:

分享图片

 

JDK8新特性--常用函数接口--函数式接口作为方法的参数案例

JDK8新特性--常用函数接口--函数式接口作为方法的参数案例

package com.itheima.demo03.LambdaTest;
/*

例如java.lang.Runnable接口就是一个函数式接口,
假设有一个startThread方法使用该接口作为参数,那么就可以使用Lambda进行传参。
这种情况其实和Thread类的构造方法参数为Runnable没有本质区别。

*/
public class Demo01Runnable {

//定义一个方法startThread,方法的参数使用函数式接口Runnable
public static void startThread(Runnable run){
    //开启多线程
    new Thread(run).start();
}

public static void main(String[] args) {
    //调用startThread方法,方法的参数是一个接口,那么我们可以传递这个接口的匿名内部类
    startThread(new Runnable() {
        @Override
        public void run() {
            System.out.println(Thread.currentThread().getName()+"-->"+"线程启动了");
        }
    });

    //调用startThread方法,方法的参数是一个函数式接口,所以可以传递Lambda表达式
    startThread(()->{
        System.out.println(Thread.currentThread().getName()+"-->"+"线程启动了");
    });

    //优化Lambda表达式
    startThread(()->System.out.println(Thread.currentThread().getName()+"-->"+"线程启动了"));
}

}

JDK8新特性--常用函数接口--函数式接口作为返回值的参数案例

JDK8新特性--常用函数接口--函数式接口作为返回值的参数案例

package com.itheima.demo03.LambdaTest;

import java.util.Arrays;
import java.util.Comparator;

/*

如果一个方法的返回值类型是一个函数式接口,那么就可以直接返回一个Lambda表达式。
当需要通过一个方法来获取一个java.util.Comparator接口类型的对象作为排序器时,就可以调该方法获取。

*/
public class Demo02Comparator {

//定义一个方法,方法的返回值类型使用函数式接口Comparator
public static Comparator<String> getComparator(){
    //方法的返回值类型是一个接口,那么我们可以返回这个接口的匿名内部类
    /*return new Comparator<String>() {
        @Override
        public int compare(String o1, String o2) {
            //按照字符串的降序排序
            return o2.length()-o1.length();
        }
    };*/

    //方法的返回值类型是一个函数式接口,所有我们可以返回一个Lambda表达式
    /*return (String o1, String o2)->{
        //按照字符串的降序排序
        return o2.length()-o1.length();
    };*/

    //继续优化Lambda表达式
    return (o1, o2)->o2.length()-o1.length();
}

public static void main(String[] args) {
    //创建一个字符串数组
    String[] arr = {"aaa","b","cccccc","dddddddddddd"};
    //输出排序前的数组
    System.out.println(Arrays.toString(arr));//[aaa, b, cccccc, dddddddddddd]
    //调用Arrays中的sort方法,对字符串数组进行排序
    Arrays.sort(arr,getComparator());
    //输出排序后的数组
    System.out.println(Arrays.toString(arr));//[dddddddddddd, cccccc, aaa, b]
}

}

阶段 1 语言基础 + 高级_1-3-Java 语言高级_02 - 继承与多态_第 3 节 接口_10_接口的私有方法使用

阶段 1 语言基础 + 高级_1-3-Java 语言高级_02 - 继承与多态_第 3 节 接口_10_接口的私有方法使用



这是上一节的代码


我们现在新建一个实现类去实现上面的接口



这里的 common 方法是不能独立存在的。它是专门为了 methodDefault1 和 2 存在的,它只能被这两个方法使用。不应该被你的实现类用到

所以这里用私有方法进行改造

那么实现类中就调用不到这个接口内的私有方法了。这里就会报错了。

私有静态方法

Ctrl+C+V 复制一个实现类 A 出来改名字叫做 B

接口中静态方法也可能产生重复代码的问题


公共的方法提取。只不过现在是 public static 的公共方法。这种做法也不恰当。所以实现类里面都可能访问到这个 common 的公共方法

这里改成 private 就可以了。这是 Java9 里面新添加的内容

这样一来 private 就只有本接口中才能访问
这里把方法名字改成了 methodStatic1 和 2

调用接口里面的静态方法


Common 这个方法是访问不到的

这是个错误的写法









 

阶段 1 语言基础 + 高级_1-3-Java 语言高级_02 - 继承与多态_第 3 节 接口_3_接口的抽象方法定义

阶段 1 语言基础 + 高级_1-3-Java 语言高级_02 - 继承与多态_第 3 节 接口_3_接口的抽象方法定义





光标放在这里。就可以光标上下箭头的来回选择。

这样我就创建了一个接口

定义的抽象方法。public abstract 颜色是灰颜色的

必须是固定的格式

把 public 换成了 private 就会报错


这两个关键字可以省略不写




省略 abstract 不写也是抽象方法


public abstract 都省略了 也是抽象方法








 

关于阶段1 语言基础+高级_1-3-Java语言高级_08-JDK8新特性_第1节 常用函数接口_5_函数式接口作为方法的参数案例的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于JDK8新特性--常用函数接口--函数式接口作为方法的参数案例、JDK8新特性--常用函数接口--函数式接口作为返回值的参数案例、阶段 1 语言基础 + 高级_1-3-Java 语言高级_02 - 继承与多态_第 3 节 接口_10_接口的私有方法使用、阶段 1 语言基础 + 高级_1-3-Java 语言高级_02 - 继承与多态_第 3 节 接口_3_接口的抽象方法定义等相关知识的信息别忘了在本站进行查找喔。

本文标签: