0

我有一个非常具体的情况。这种情况的背景是我正在为 Minecraft 构建一个插件,但我遇到了一些设计问题。我已经建立了抽象类、接口及其派生的具体类的层次结构(如果重要的话,在 Java 中)。这是结构的一般概念:

公共接口 ICommandUsage、ICommandPattern、IPermissionNode

(这些实现是为了每个命令必须定义命令的正确用法,遵循一定的模式以匹配正则表达式,并具有权限节点,以便命令发送者可以使用或不使用命令)

公共抽象类命令 = 基类

公共抽象类 ConsoleCommand = Command 类的派生子集

公共抽象类 PlayerCommand = Command 类的派生子集

公共抽象类 UserCommand = PlayerCommand 的派生子集

公共抽象类 ServerAdminCommand = PlayerCommand 的派生子集

其余的类是从接口和抽象类定义函数的各种具体实现。

这是我的困境:在启动插件时,“main”类会注册所有命令,以便当用户发出命令时,commandDelegate 可以通过模式匹配来解释命令。模式匹配来自 getPattern() 方法,该方法返回一个字符串,该字符串被半硬编码到每个具体类中。

我的逻辑是每个具体的类都应该对自己的模式、权限节点和用法负责,所以这些方法应该存在于类本身中。

主要问题是,当我在主类中注册命令时,我必须将空参数传递给构造函数以创建“假”命令......

registerCommand("console_info", new ConsoleInfo(null, null));

我承认这是一种不好的做法,但我不知道在哪里寻找解决方案。如果有人能指出我正确的方向,我将不胜感激。

4

1 回答 1

0

Java 允许您为单个类创建多个构造函数,只要每个构造函数采用不同类型的参数即可。例如

public class Thing {

private int value;

public Thing(int i) {
    value = i;
}
public Thing() {
    value = 0;
}
}

因此,与其使用两个空值作为参数构造类,不如创建一个不带参数的构造函数并在类中处理这种情况。如果将来您决定更改不带参数构建类的情况的标准,这将使更改变得容易。

于 2013-07-07T20:50:12.560 回答