【发布时间】:2014-05-26 09:23:02
【问题描述】:
对于命令系统的实现,我希望用户能够将他们想要的类型的 class[] 表示为他们的命令参数,并有一个方法接受他们可以使用的那些类型,并预先解析参数.
例如
玩家想要创建一个统计命令来列出玩家统计数据。 该命令的语法为 /info PLAYER_NAME STATISTIC_NAME
在代码端,我希望用户能够扩展我的 Command 类并访问方法
public void resolve(S arg1, T arg2);
这里我们现在必须有泛型,如果我有很长的列表或参数,这是一个问题。此外,S 和 T 必须实现一些接口,以便它们可以从 String 转换为它们的类型。也没有类数组,只有各种不能确保 100% 兼容性的重载方法 例如,如果我想要一个 Integer 参数,我不能只修改 Integer 来帮助我。我尝试的解决方案是创建一个参数包装器(ArgType)并让 S 和 T 扩展 ArgType,这工作正常,直到我尝试通过使用管理器将类存储到实例来使 ArgType 成为伪单例。这是一个问题,因为
Map<Class<? extends ArgType<T>, ArgType<T>>
不是有效语句,因为未定义 T。有没有办法让这张地图在不大量投射的情况下工作,或者有更好的方法来完全做到这一点?
【问题讨论】:
-
我不确定泛型是否会帮助您。也许是反思。
-
基础是当一个命令被解析时,首先发生的是一个巨大的列表: int arg1 = Integer.valueOf(args[0]);双 arg2 = Double.valueOf(args[1]);玩家 player = Players.getByName(args[2]);相反,我想对这些进行预处理,因此,我想我需要
的泛型