#java
Есть класс, в нём есть методы public void test1(){}; public void test2(){}; public void test3(){}; Возможно ли при запуске условия If (main.rand.nextInt(3) == x) запустить метод testX?
Ответы
Ответ 1
package com.example; import java.util.Random; import java.lang.reflect.Method; class Test { public void test1() {} public void test2() {} public void test3() {} } public class Main { public static void main(String args[]) throws ReflectiveOperationException { Random rnd = new Random(); String methodName = "test" + (rnd.nextInt(3) + 1); Class cls = Class.forName("com.example.Test"); Object obj = cls.newInstance(); Method method = cls.getDeclaredMethod(methodName); method.invoke(obj); } }Ответ 2
При использовании функциональных интерфейсов из Java 8 можно создать массив из нужных методов, после чего выбирать и запускать случайный: public class Test { public void test1() { System.out.println("1"); }; public void test2() { System.out.println("2"); }; public void test3() { System.out.println("3"); }; public static void main(String[] args) { Test t = new Test(); Runnable[] methods = { t::test1, t::test2, t::test3 }; Random random = new Random(); Runnable method = methods[random.nextInt(methods.length)]; method.run(); } } Можно вынести вызов метода в отдельный метод, который будет принимать Test t в качестве аргумента: public class Test { public void test1() { System.out.println("1"); }; public void test2() { System.out.println("2"); }; public void test3() { System.out.println("3"); }; public static void main(String[] args) { Test t = new Test(); callRandom(t); } private static final Random random = new Random(); private static final List> methods = Arrays.asList(Test::test1, Test::test2, Test::test3); private static void callRandom(Test t) { Consumer method = methods.get(random.nextInt(methods.size())); method.accept(t); } }
Комментариев нет:
Отправить комментарий