Java中随机函数的选择

Java中随机函数的选择,java,Java,我想随机选择一个函数。这是以下代码: public class Thank_you_five implements RandomInterface { public static void Thankyou_five(){...} } public class Thank_you_four implements RandomInterface { public static void Thankyou_four(){...} } public class Thank_you_three

我想随机选择一个函数。这是以下代码:

public class Thank_you_five implements RandomInterface
{
  public static void Thankyou_five(){...}
}
public class Thank_you_four implements RandomInterface
{
  public static void Thankyou_four(){...}
}
public class Thank_you_three implements RandomInterface
{
  public static void Thankyou_three(){...}
}
public interface RandomInterface
{
  public static void Thankyou_five();
  public static void Thankyou_four();
  public static void Thankyou_three();
}
所以我的目标是随机选择一个函数,就像python中的we random.choose()和其中的一些函数一样,我想用Java实现同样的效果

请帮忙

谢谢,
Adrija

首先,最好在接口中定义一个Abstract方法:

public interface RandomInterface{
    void thankYou();
}
然后,您可以创建几个实现:

RandomInterface t1 = () -> System.out.println("thank you 1");
RandomInterface t2 = () -> System.out.println("thank you 2");
RandomInterface t3 = () -> System.out.println("thank you 3");
要获得随机实现,您可以将所有对象添加到数组并生成随机索引:

RandomInterface[] arr = {t1, t2, t3};
int i = new Random().nextInt(arr.length);
arr[i].thankYou();

坦率地说,我更喜欢罗斯兰的建议。但只要你问我,这就是我的想法:

package com.example;

import java.util.Random;

public abstract class RandomFn {

    public static RandomFn factory() throws Exception {
        int r = new Random().nextInt(3);
        switch (r) {
           case 0: return new ThankYouOne();
           case 1: return new ThankYouTwo();
           case 2: return new ThankYouThree();
           default : throw new Exception ("ThankYou(" + r +"): unsupported value!");
        }
    }

    public abstract void thankYou();

    public static void main(String[] args) {
        try {
            RandomFn.factory().thankYou();
        } catch (Exception e) {
            System.out.println(e);
        }
    }

}

class ThankYouOne extends RandomFn {
    public void thankYou() {
        System.out.println("Thank you one");
    }
}

class ThankYouTwo extends RandomFn {
    public void thankYou() {
        System.out.println("Thank you two");
    }
}

class ThankYouThree extends RandomFn {
    public void thankYou() {
        System.out.println("Thank you three");
    }
}
如果你不喜欢很多课程的想法,那么

public class RandomFn {

    public void thankYou () throws Exception {
        int r = new Random().nextInt(3);
        switch (r) {
           case 0: 
             thankYouOne(); break;
           case 1: 
             thankYouTwo(); break;
           case 2: 
             thankYouThree(); break;
           default : 
             throw new Exception ("ThankYou(" + r +"): unsupported value!");
        }
    }

    private void thankYouOne() { System.out.println("Thank you one"); }

    private void thankYouTwo() { System.out.println("Thank you two"); }

    private void thankYouThree() { System.out.println("Thank you three"); }
    ...

接口中的静态方法应该有一个主体,如何使用一个随机生成器,生成一个随机数,如果这个数在一个特定的范围内,则执行一个特定的函数?一些
if
语句应该执行以下操作:生成一个介于
0
2
之间的随机数整数,或者生成您有多少个函数。根据生成的数字和您拥有的函数创建开关。我编辑了问题上面的代码不能也不会编译:当一个类实现一个接口时,它必须实现该接口中的所有方法。正如埃尔文·西拉吉(Ervin Szilagyi)所建议的那样,使用反射是过分的。最好的建议是:有一个方法(可能是静态方法)可以随机调用n个函数中的任意一个。接口可能很有用:但它正好有两种方法:静态的“callRandomFunction()”方法和虚拟的“doSomethingRandom()”方法。如果downvoter能够解释这个答案的错误,我将不胜感激。如果它不能解决问题,我可以编辑或删除它