I have done a lot of searching around online and have come up with no information on this. My question is how does Java 8 internally handle Method Referencing e.g. Car::getWeight
? Does it use Reflection, or is it an entirely new method of accessing a classes static and non-static methods?
I ask this because I have been learning about it recently and have become somewhat intrigued. I really enjoy the ability to handle function references just as though they were variables in languages like Python and JS. To be able to do this (in a somewhat limited capacity) in Java, is really exciting. Although, if the performance suffers much like with Reflection, it may not be such an exciting prospect.
Consider this example:
public class Main {
private static List<String> shapes = new ArrayList<>();
private static List<Supplier<Shape>> constrs = new ArrayList<>();
static{
constrs.add(Triangle::new);
constrs.add(Square::new);
shapes.add("triangle");
shapes.add("square");
}
public static void main(String[] args){
Shape x = constrs.get(shapes.indexOf("triangle")).get();
Supplier<String> h = x::dothis;
System.out.println(h.get());
}
}
There is no way for the compiler to know of what type x
is at compile time, so how can the compiler replace x::dothis
with an anonymous method?