Java教程
+ -

Java 方法引用

2019-09-09 9 0

方法引用通过方法的名字来指向一个方法。
方法引用可以使语言的构造更紧凑简洁,减少冗余代码。

方法引用使用一对冒号 :: 。

下面,我们在 Car 类中定义了 4 个方法作为例子来区分 Java 中 4 种不同方法的引用。

package com.bytekits.main;
@FunctionalInterface
public interface Supplier<T> {
    T get();
}
class Car {
    //Supplier是jdk1.8的接口,这里和lamda一起使用了
    public static Car create(final Supplier<Car> supplier) {
        return supplier.get();
    }
    public static void collide(final Car car) {
        System.out.println("Collided " + car.toString());
    }
    public void follow(final Car another) {
        System.out.println("Following the " + another.toString());
    }
    public void repair() {
        System.out.println("Repaired " + this.toString());
    }
}
  • 构 造器引用:它的语法是Class::new,或者更一般的Class< T >::new实例如下:

    final Car car = Car.create( Car::new );
    

    final List< Car > cars = Arrays.asList( car );

  • 静 态方法引用:它的语法是Class::static_method,实例如下:

    cars.forEach( Car::collide );
    
  • 特 定类的任意对象的方法引用:它的语法是Class::method实例如下:

    cars.forEach( Car::repair );
    
  • 特 定对象的方法引用:它的语法是instance::method实例如下:

    final Car police = Car.create( Car::new );
    

    cars.forEach( police::follow );

方法引用实例

Java8Tester.java 文件输入以下代码:

Java8Tester.java 文件

import java.util.List;
import java.util.ArrayList;
public class Java8Tester {
   public static void main(String args[]){
      List names = new ArrayList();
      names.add("Google");
      names.add("bytekits");
      names.add("Taobao");
      names.add("Baidu");
      names.add("Sina");
      names.forEach(System.out::println);
   }
}

实例中我们将 System.out::println 方法作为静态方法来引用。

执行以上脚本,输出结果为:

$ javac Java8Tester.java 
$ java Java8Tester
Google
bytekits
Taobao
Baidu
Sina

0 篇笔记 写笔记

Python3 列表remove()方法
remove() 函数用于移除列表中某个值的第一个匹配项。语法remove()方法语法:list.remove(obj)参数obj — 列表中要移除的对象。返回值该方法没有返回值但是会移除两种中的某个值的第一个匹配项。实例以下实例展示了 remove()函数的使用方法:#!/usr/bin/pyth......
C# 索引器(Indexer)
索引器(Indexer) 允许一个对象可以像数组一样被索引。当您为类定义一个索引器时,该类的行为就会像一个 虚 拟数组(virtualarray) 一样。您可以使用数组访问运算符([ ])来访问该类的实例。语法一维索引器的语法如下:element-type this[int index] { /......
Perl 引用
引用就是指针,Perl 引用是一个标量类型可以指向变量、数组、哈希表(也叫关联数组)甚至子程序,可以应用在程序的任何地方。创建引用定义变量的时候,在变量名前面加个,就得到了这个变量的一个引用,比如:$scalarref = $foo; # 标量变量引用$arrayref = @ARG......
Java Applet 基础
Applet 是一种 Java 程序。它一般运行在支持 Java 的 Web 浏览器内。因为它有完整的 Java API支持,所以Applet是一个全功能的 Java 应用程序。如下所示是独立的 Java 应用程序和 applet 程序之间重要的不同:Java 中 Applet 类继承了 java.......
Perl POD 文档
Perl 中可以在模块或脚本中嵌入 POD(Plain Old Documentation) 文档。POD 是一种简单而易用的标记型语言(置标语言)。POD 文档使用规则:POD 文档以 =head1 开始, =cut 结束, =head1 前与 =cut 后添加一空行。Perl 会忽略 POD 中......
Ruby 方法
Ruby 方法与其他编程语言中的函数类似。Ruby 方法用于捆绑一个或多个重复的语句到一个单元中。方法名应以小写字母开头。如果您以大写字母作为方法名的开头,Ruby 可能会把它当作常量,从而导致不正确地解析调用。方法应在调用之前定义,否则 Ruby 会产生未定义的方法调用异常。语法def metho......
Python3 字符串ljust()方法
ljust() 方法返回一个原字符串左对齐,并使用空格填充至指定长度的新字符串。如果指定的长度小于原字符串的长度则返回原字符串。语法ljust()方法语法:str.ljust(width[, fillchar])参数width — 指定字符串长度。fillchar — 填充字符,默认为空格。返回值返......
Python3 os.fstat() 方法
os.fstat() 方法用于返回文件描述符fd的状态,类似 stat()。Unix,Windows上可用。fstat 方法返回的结构:st_dev: 设备信息st_ino: 文件的i-node值st_mode: 文件信息的掩码,包含了文件的权限信息,文件的类型信息(是普通文件还是管道文件,或者是其......
Perl 面向对象
Perl 中有两种不同地面向对象编程的实现:一是基于匿名哈希表的方式,每个对象实例的实质就是一个指向匿名哈希表的引用。在这个匿名哈希表中,存储来所有的实例属性。二是基于数组的方式,在定义一个类的时候,我们将为每一个实例属性创建一个数组,而每一个对象实例的实质就是一个指向这些数组中某一行索引的引用。在......
Python3 字典popitem() 方法
Python 字典 popitem() 方法随机返回并删除字典中的一对键和值(一般删除末尾对)。如果字典已经为空,却调用了此方法,就报出KeyError异常。语法popitem()方法语法:popitem()参数无返回值返回一个键值对(key,value)形式。实例以下实例展示了 popitem()......
Python3 运算符
本章节主要说明Python的运算符。举个简单的例子 4 +5 = 9 。 例子中, 4 和 5 被称为 操 作数,”+ “ 称为运算符。Python语言支持以下类型的运算符:算术运算符比较(关系)运算符赋值运算符逻辑运算符位运算符成员运算符身份运算符运算符优先级接下来让我们一个个来学习Python的......
Python3 os.stat() 方法
os.stat() 方法用于在给定的路径上执行一个系统 stat 的调用。语法stat() 方法语法格式如下:os.stat(path)参数path -- 指定路径返回值stat 结构:st_mode: inode 保护模式st_ino: inode 节点号。st_dev: inode 驻留的设备。......
Java rint() 方法
rint() 方法返回最接近参数的整数值。语法该方法有以下几种语法格式:double rint(double d)参数double 原始数据类型。返回值返回 double 类型数组,是最接近参数的整数值。实例实例public class Test{ public static void mai......
Python3 File write() 方法
write() 方法用于向文件中写入指定字符串。在文件关闭前或缓冲区刷新前,字符串内容存储在缓冲区中,这时你在文件中是看不到写入的内容的。如果文件打开模式带 b,那写入文件内容时,str (参数)要用 encode 方法转为 bytes 形式,否则报错:TypeError: a bytes-like......
Python3 os.fdatasync() 方法
os.fdatasync() 方法用于强制将文件写入磁盘,该文件由文件描述符fd指定,但是不强制更新文件的状态信息。如果你需要刷新缓冲区可以使用该方法。Unix上可用。语法fdatasync() 方法语法格式如下:os.fdatasync(fd);参数fd -- 文件描述符返回值该方法没有返回值。实......
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

您的支持,是我们前进的动力!