Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中创建类的方法数组_Java_Arrays_Methods_Dynamically Generated - Fatal编程技术网

如何在Java中创建类的方法数组

如何在Java中创建类的方法数组,java,arrays,methods,dynamically-generated,Java,Arrays,Methods,Dynamically Generated,你好 我有一门课,我要用它来生成数学练习,以达到训练的目的。课程由一系列的方法组成,每一种方法生成一种类型的练习 然后我想做一个方法,生成一个随机类型的随机练习。为此,我想将方法名存储在一个数组中,并调用一个随机条目 到目前为止还不错 因为将来我将添加方法来生成新的练习类型,我想知道是否有一种方法可以动态生成方法数组:一旦类被加载,构造函数将检查可用的方法并将它们的名称存储在数组中 可能吗?如果是这样的话,如何存储?您可以存储方法代理,而不是存储名称 Method[] methods = get

你好

我有一门课,我要用它来生成数学练习,以达到训练的目的。课程由一系列的方法组成,每一种方法生成一种类型的练习

然后我想做一个方法,生成一个随机类型的随机练习。为此,我想将方法名存储在一个数组中,并调用一个随机条目

到目前为止还不错

因为将来我将添加方法来生成新的练习类型,我想知道是否有一种方法可以动态生成方法数组:一旦类被加载,构造函数将检查可用的方法并将它们的名称存储在数组中


可能吗?如果是这样的话,如何存储?

您可以存储方法代理,而不是存储名称

Method[] methods = getClass().getDeclaredMethods();

您需要检查这些方法,忽略您添加的任何非测试的方法。

您可以使用
反射API
检查可用的方法

 Method[] methods= Class.forName("ClassTo test").getDeclaredMethods();
尽管如此,调用方法时可能会出现很多问题

你只要吃点东西就可以避免它

interface  IExercise
{
    void createExercise();
}
class Exercise1 implements IExercise
{
    @Override
    public void createExercise()
    {
    }
}
然后,您可以使用
IExercise[]
随机生成
Exercise

创建如下对象:

MathExample math = new MathExample();

并将它们添加到
ArrayList

您可以使用反射来发现类的方法


然而在我看来,这是一个糟糕的架构。处理不同练习的更好方法是创建一个将由
*练习
类实现的接口
IExercise
。然后创建这些对象,将它们放入一个数组中,然后随机选择一个。然后从接口或其他地方调用指定的方法…

我强烈建议查找策略模式:

您将如何将其应用于您的问题?只需创建包含通用接口的对象(为您提供创建练习的方法)并使用这些对象的列表


您还将练习一个非常有用的模式

我认为使用命令模式并将每个练习存储为实现标记接口(ICommand)的命令类更安全。之后,您可以使用反射在运行时检测在类路径上实现ICommand的所有类,以获得可以运行的练习列表。这也将使您不必在随机选择代码中添加在集合中设计的每种新类型的练习


这有点类似于下面建议的策略模式。

我认为,最好在数组中创建和选择命令。随机选择命令并放入链。

了解。感谢所有人,特别感谢那些建议替代体系结构的人。我会尽快检查的。我选择了最直截了当的答案。这可能是因为在Java中,您无法在运行时生成方法会产生误导,可能是因为
ClassName.class.getDeclaredMethods()
更短,更不容易出错。(免责声明:不是我)