How do I invoke a Java method when given the method name as a string?

前端 未结 21 2782
耶瑟儿~
耶瑟儿~ 2020-11-21 04:50

If I have two variables:

Object obj;
String methodName = \"getName\";

Without knowing the class of obj, how can I call the met

21条回答
  •  长情又很酷
    2020-11-21 05:21

    Indexing (faster)

    You can use FunctionalInterface to save methods in a container to index them. You can use array container to invoke them by numbers or hashmap to invoke them by strings. By this trick, you can index your methods to invoke them dynamically faster.

    @FunctionalInterface
    public interface Method {
        double execute(int number);
    }
    
    public class ShapeArea {
        private final static double PI = 3.14;
    
        private Method[] methods = {
            this::square,
            this::circle
        };
    
        private double square(int number) {
            return number * number;
        }
    
        private double circle(int number) {
            return PI * number * number;
        }
    
        public double run(int methodIndex, int number) {
            return methods[methodIndex].execute(number);
        }
    }
    

    Lambda syntax

    You can also use lambda syntax:

    public class ShapeArea {
        private final static double PI = 3.14;
    
        private Method[] methods = {
            number -> {
                return number * number;
            },
            number -> {
                return PI * number * number;
            },
        };
    
        public double run(int methodIndex, int number) {
            return methods[methodIndex].execute(number);
        }
    }
    

提交回复
热议问题