java
  • Introduction
  • Patrones de DiseƱo
    • Builder Design Pattern
  • Java 8
    • Ordenar List
    • Optional
    • Gradle
    • filter
    • Lambda y Stream
  • Java 9
  • Java 10
  • Java 11
  • Java 12
  • Performance
  • Modularidad
  • GraalVM
    • Graalvm
  • JUnit
  • Apache Archiva
    • Apache Archiva
  • Dropbox APi
  • JVM Configuracion
    • JVM Configuration
    • NetBeans.conf
    • Glassfish
  • Data Science in Pure Java
  • Reflection
    • Call Methods at Runtime Using Java Reflection
  • LambdaMetaFactory
Powered by GitBook
On this page
  • LambdaMetaFactory
  • Invocar el metodo getName()
  • Persona.java

Was this helpful?

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);
  }
PreviousCall Methods at Runtime Using Java Reflection

Last updated 6 years ago

Was this helpful?