供应商功能接口Java示例

时间:2020-01-09 10:35:14  来源:igfitidea点击:

在这篇文章中,我们将看到java.util.function.Supplier功能接口的示例。

供应商功能接口表示不接受任何参数并提供结果的操作。在Supplier接口中,有一个抽象方法get(),没有默认或者静态接口方法。

如果要编写需要返回值的Lambda表达式,则可以将该Lambda表达式编写为Supplier内置功能接口的实现。

供应商功能界面示例

1.如果要生成一些随机数,可以将其实现为Supplier接口的get()方法。

import java.util.function.Supplier;

public class SupplierExample {
  public static void main(String[] args) {
    Supplier<Double> randomNoGen = () -> Math.random();
    System.out.println(randomNoGen.get());
    System.out.println(randomNoGen.get());
  }
}

输出:

0.9507895772946557
0.11609076109430083

在程序声明中;供应商randomNoGen =()-> Math.random();是Supplier作为lambda表达式的实现。由于此实现是功能接口的实例,因此已分配给类型Supplier的变量。

调用randomNoGen.get()方法时,由于"目标类型",Java可以从上下文中推断出在哪里可以找到get()方法的实现。

2.如果要在应用程序中的多个位置显示当前日期,则可以将其实现为供应商。

import java.time.LocalDate;
import java.util.function.Supplier;

public class SupplierExample {
	public static void main(String[] args) {
		Supplier<LocalDate> currDate = () -> LocalDate.now();
		System.out.println(currDate.get());
	}
}

3.作为类对象的提供者。如果存在Employee类,则可以使用Supplier接口创建此类的对象。

public class Employee {
  private String name;
  private String dept;
  private int salary;
  Employee(){};
  Employee(String name, String dept, int salary){
    this.name = name;
    this.dept = dept;
    this.salary = salary;
  }
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }
  public int getSalary() {
    return salary;
  }
  public void setSalary(int salary) {
    this.salary = salary;
  }
  public String getDept() {
    return dept;
  }
  public void setDept(String dept) {
    this.dept = dept;
  }
  @Override
  public String toString() {
    // TODO Auto-generated method stub
    return getName() + " " + getDept() + " " + getSalary();
  }
}
public class SupplierExample {
	public static void main(String[] args) {	
		// Invokes no-arg constructor
		Employee emp = getEmpObject(Employee::new);
		System.out.println(emp);
		// Invokes constructor with parameters
		emp = getEmpObject(() -> new Employee("David", "IT", 12000));
		System.out.println(emp);
	}
	
	public static Employee getEmpObject(Supplier<Employee> sup) {
		return sup.get();
	}
}

JDK中的供应商功能接口

内置功能接口在JDK本身中得到广泛使用。在Java Stream API中,有一个方法generate(),将Supplier作为参数。

generate(Supplier <T> s)–返回无限顺序无序流,其中每个元素由提供的供应商生成。

我们可以使用这种方法来生成随机数流。

public class SupplierExample {
	public static void main(String[] args) {	
		Stream.generate(()->Math.random()).limit(3).forEach(System.out::println);
	}
}

输出:

0.17411307331904347
0.9293020926865666
0.9854950033297908