Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.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_Class_Object_Methods_Field - Fatal编程技术网

有一个Java类,其中一个字段是一个方法?

有一个Java类,其中一个字段是一个方法?,java,class,object,methods,field,Java,Class,Object,Methods,Field,我对Java相当陌生,因为我的文章的性质会透露出来 我需要创建一个包含一组方法的类,如果需要的话,程序员可以轻松地扩展这些方法。我考虑过有两个类:Commands和CommandCommands包含一个Command对象数组,程序员可以在其中添加新命令。命令类有两个字段。类的名称和方法签名。我不知道如何才能做到这一点。在C语言中,我认为可以有一个函数结构,那么我们可以有一个类,其中类的实例是方法吗?还是我完全走错了方向 我想尝试这样做: public class Commands { p

我对Java相当陌生,因为我的文章的性质会透露出来

我需要创建一个包含一组方法的类,如果需要的话,程序员可以轻松地扩展这些方法。我考虑过有两个类:
Commands
Command
Commands
包含一个
Command
对象数组,程序员可以在其中添加新命令。
命令
类有两个字段。类的名称和方法签名。我不知道如何才能做到这一点。在C语言中,我认为可以有一个函数结构,那么我们可以有一个类,其中类的实例是方法吗?还是我完全走错了方向

我想尝试这样做:

public class Commands
{
    private ArrayList<Command> commands;

    /**
     * Constructor for objects of class Command
     */
    public Commands()
    {
        createCommands();
    }

    /**
     * This is where a programmer can add new commands
     */
    public void createCommands()
    {
        commands.add(new Command("move", public void move()));
    }

    /**
     * This is where the programmer can define the move command
     */
    public void move()
    {
        ....
    }
}

public class Command
{
    private String command_name;
    private Method command;

    public Command(String command_name, Method command)
    {
        this.command_name = command_name;
        this.command = command;
    }
}
公共类命令
{
私有ArrayList命令;
/**
*类命令的对象的构造函数
*/
公共命令()
{
createCommands();
}
/**
*这是程序员可以添加新命令的地方
*/
公共void createCommands()
{
添加(新命令(“移动”,public void move());
}
/**
*这是程序员可以定义move命令的地方
*/
公开作废动议()
{
....
}
}
公共类命令
{
私有字符串命令名;
私有方法命令;
公共命令(字符串命令\名称、方法命令)
{
this.command\u name=command\u name;
this.command=命令;
}
}

我知道这有很多问题,但我一直在寻找正确的方法。提示/帮助将非常棒。

我想您应该使用:

在面向对象编程中 命令模式是中的一种设计模式 使用哪个对象来表示 并封装所有信息 需要在以后调用一个方法 时间

维基百科页面有一个例子


您的
命令
应该是一个带有
execute
方法的接口。程序员可以编写实现
命令
接口的类,因此必须实现
execute
方法来完成所需的工作。然后,您可以拥有一个
Command[]
数组,对于每个
Command
对象,您只需调用
execute
即可执行任务。

我想您应该使用以下命令:

在面向对象编程中 命令模式是中的一种设计模式 使用哪个对象来表示 并封装所有信息 需要在以后调用一个方法 时间

维基百科页面有一个例子


您的
命令
应该是一个带有
execute
方法的接口。程序员可以编写实现
命令
接口的类,因此必须实现
execute
方法来完成所需的工作。然后,您可以拥有一个
Command[]
数组,对于每个
Command
对象,您只需调用
execute
即可执行任务。

Java没有函数指针,因此这不起作用。您可能想做的是使用一个带有
execute()
方法的命令接口,该方法在具体的子类中实现


这是风格的问题,但我通常不会在命令实现中使用名称字段。相反,我只需要创建一个包含每个命令名称的
映射。

Java没有函数指针,因此这不起作用。您可能想做的是使用一个带有
execute()
方法的命令接口,该方法在具体的子类中实现


这是风格的问题,但我通常不会在命令实现中使用名称字段。相反,我只需要创建一个包含每个命令名称的
Map

注意,在Java中不能直接传递方法。相反,它们需要是实现公共接口的对象。例如,您的方法可以成为实现可运行接口的对象。然后,当需要使用该方法时,只需调用“run”。

注意,在Java中不能直接传递方法。相反,它们需要是实现公共接口的对象。例如,您的方法可以成为实现可运行接口的对象。然后,当需要使用该方法时,只需调用“run”。

Java没有函数指针。这是一个常见的技巧:

abstract class (or interface) Command {
  void execute();
}

public void createCommands() {
  commands.add(new Command(){ 
      @Override
      void execute() {
        something.move();
      }
    });
}

Java没有函数指针。这是一个常见的技巧:

abstract class (or interface) Command {
  void execute();
}

public void createCommands() {
  commands.add(new Command(){ 
      @Override
      void execute() {
        something.move();
      }
    });
}

您试图通过此操作实现的总体目标是什么?将有许多命令,用户可以通过键入“executename\u of_command”来执行它们。这些命令将在commands类中定义。您试图通过这些命令实现的总体目标是什么?将有许多命令,用户可以通过键入“execute name_of_command”来执行它们。这些命令将在commands类中定义,非常感谢。这是一个很大的帮助,我认为这是有效的。现在唯一需要做的是,我需要能够命名这些命令,以便用户可以通过键入“executename\u of_command”来执行它们。我正在尝试使用HashMap来存储名称和命令。我来看看我怎么说不客气!使用
Map
将用户友好的命令名称与相应的
Command
对象关联起来是一个好主意。非常感谢。这是一个很大的帮助,我认为这是有效的。现在唯一需要做的是,我需要能够命名这些命令,以便用户可以通过键入“executename\u of_command”来执行它们。我正在尝试使用HashMap来存储名称和命令。我来看看我怎么说不客气!使用
映射
将用户友好的命令名称与相应的
命令
对象关联是一个好主意。编辑:按照您的建议使用映射时,我遇到了一个问题,但我想我现在可以正常工作了。谢谢编辑:按照你的建议使用地图时,我遇到了一个问题,但我想我会