public class Car {
private int maxSpeed;
public Car(int maxSpeed) {
this.maxSpeed = maxSpeed;
}
public int getMaxSpeed() {
return maxS
Let's look at Function in detail:
Interface Function {
default Function andThen(Function super R,? extends V> after){}
R apply(T t);
default Function compose(Function super V,? extends T> before){}
static Function identity();
}
note the R apply(T t);
Applies this function to the given argument.
Function function = Void::?????;
Void voidInstance = null;
function.apply(voidInstance);
This doesn't make sense. You want to pass a Void so that the function of the Void is applied ?
A few illustrative examples of what compiles as a function
note that c->c.getMaxSpeed()
and Car::getMaxSpeed
are syntactically equivalent if the method is an instanceMethod. For non-static-methods the first argument is infered from the type who's method is used, and needs to be provided later (as the instance which the method will be executed on/applied on).
public class Car {
private int maxSpeed;
public Car(int maxSpeed) {
this.maxSpeed = maxSpeed;
}
public int getMaxSpeed() {
return this.maxSpeed;
}
public Void setMaxSpeed() {
this.maxSpeed = 12;
return null;
}
public static int intStaticFunction(Void v) {
return new Random().nextInt();
}
public static Void voidStaticFunction(Void v) {
return null;
}
public static void main(String[] args) {
final Car carX = new Car(155);
final Car carY = new Car(140);
final List cars = new ArrayList<>();
cars.add(carX);
cars.add(carY);
cars.sort(Comparator.comparing(Car::getMaxSpeed));
final Function function1 = c->c.getMaxSpeed();
final Function function2 = Car::getMaxSpeed;
final Function function3 = Car::setMaxSpeed;
final Function function4 = n->n;
final Function function5 = n->5;
final Function function6 = Car::intStaticFunction;
final Function function7 = Car::voidStaticFunction;
final Function function8 = function1::apply;
final Function function9 = function2::apply;
System.out.println(function1.apply(carX));
System.out.println(function2.apply(carX));
System.out.println(function8.apply(carX));
System.out.println(function9.apply(carX));
System.out.println(function3.apply(carX));
System.out.println(function1.apply(carX));
System.out.println(function2.apply(carX));
System.out.println(function8.apply(carX));
System.out.println(function9.apply(carX));
System.out.println();
System.out.println(function4.apply(null));
System.out.println(function5.apply(null));
System.out.println(function6.apply(null));
System.out.println(function7.apply(null));
}
}