繁体   English   中英

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

[英]How to create an array of the methods of a class in Java

美好的一天。

我有一个课程,我将用它来为训练目的生成数学练习。 该类由一系列方法组成,每个方法都生成一种类型的练习。

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

到现在为止还挺好。

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

那可能吗? 如果是这样,怎么样?

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

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

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

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

您需要通过这些忽略您添加的任何不是测试的方法。

我高兴推荐查找策略模式:

http://en.wikipedia.org/wiki/Strategy_pattern

你会如何将它应用于你的问题? 只需创建具有多种常用接口的对象(一种为您提供创建练习的方法)并使用此对象的List。

你也将练习一个非常有用的模式!

您可以使用Reflection API检查可用方法

 Method[] methods= Class.forName("ClassTo test").getDeclaredMethods();

说过调用方法时有很多东西可能出错。

你可以通过拥有它来避免它

interface  IExercise
{
    void createExercise();
}
class Exercise1 implements IExercise
{
    @Override
    public void createExercise()
    {
    }
}

然后你可以使用IExercise[]随机生成Exercise

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

http://en.wikipedia.org/wiki/Command_pattern

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

创建对象,如:

MathExample math = new MathExample();

并将它们添加到ArrayList<Objects>

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM