LambdaMetaFactory

LambdaMetaFactory

Invocar el metodo getName()

public static void main(String[] args) throws Throwable {
Person person  = new Person(";Maria");

        MethodHandles.Lookup lookup = MethodHandles.lookup();
        CallSite site = LambdaMetafactory.metafactory(lookup,
                "apply",
                MethodType.methodType(Function.class),
                MethodType.methodType(Object.class, Object.class), // Function::apply signature
                lookup.findVirtual(Person.class, "getName", MethodType.methodType(String.class)),
                MethodType.methodType(String.class, Person.class) // Person::getName signature
        );

        Function<Person, String> getterFunction = (Function<Person, String>) site.getTarget().invokeExact();

//        System.out.println(getterFunction.apply(new Person("Ann")));
        System.out.println(getterFunction.apply(person));

    }

Persona.java

public class Person {
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Person() {
    }

    public Person(String name) {
        this.name = name;
    }



  public void sayHello(){
      System.out.println("Hola mundo "+name);
  }

Last updated

Was this helpful?