Страницы

Поиск по вопросам

пятница, 31 января 2020 г.

Возможно ли запустить метод methodnameX в зависимости от случайного числа X?

#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); } }

Комментариев нет:

Отправить комментарий