[]
在使用命令的过程中,经常会在上下文参数中添加对应的值。
传递基本类型的值,用int类型举例
比如:
public class MyPluginServerCommand extends Command implements ICommandExecutableInServerSide {
@Override
public ExecuteResult execute(IServerCommandExecuteContext dataContext) {
dataContext.getParameters().put("number", 1);
return new ExecuteResult();
}
@Override
public String toString() {
return "我的服务端命令插件";
}
}
public class MyPluginServerCommand3 extends Command implements ICommandExecutableInServerSide {
@Override
public ExecuteResult execute(IServerCommandExecuteContext dataContext) {
var number = (int)dataContext.getParameters().get("number");
executeResult.getReturnValues().put("number", number);
return executeResult;
}
@Override
public String toString() {
return "我的服务端命令插件3";
}
}
传递对象类型的值
比如:
public class MyPluginServerCommand extends Command implements ICommandExecutableInServerSide {
@Override
public ExecuteResult execute(IServerCommandExecuteContext dataContext) {
JavaChildren javaChildren = new JavaChildren();
javaChildren.setName("Zhang San");
javaChildren.setAge(30);
dataContext.getParameters().put("用户", javaChildren);
return new ExecuteResult();
}
@Override
public String toString() {
return "我的服务端命令插件";
}
}
@Data
public class JavaChildren extends ObjectPropertyBase {
private String name;
private int age;
}
上面命令中,给上下文参数添加了一个key 为“用户” 的 javaChildren 对象。
当如果你在同一个插件的工程中获取当前上下文的 “用户” 参数的 value。可以直接获取到一个 javaChildren 对象。
public class MyPluginServerCommand3 extends Command implements ICommandExecutableInServerSide {
@Override
public ExecuteResult execute(IServerCommandExecuteContext dataContext) {
var javaChildren = (JavaChildren)dataContext.getParameters().get("用户");
var executeResult = new ExecuteResult();
executeResult.getReturnValues().put("Name", javaChildren.getName());
return executeResult;
}
@Override
public String toString() {
return "我的服务端命令插件3";
}
}
如果是另一个插件工程中获取当前当前上下文的 “用户” 参数的 value。此工程中不存在 javaChildren 类。或者类结构和 javaChildren 不相同的时候。此时获取到的 value 是一个Map<String,Object>。 其中key即为 javaChildren 各个属性的名称,value即为对应属性的值。
代码如下:
public class MyPluginServerCommand2 extends Command implements ICommandExecutableInServerSide {
@Override
public ExecuteResult execute(IServerCommandExecuteContext dataContext) {
var map = (Map<String,Object>)dataContext.getParameters().get("用户");
var executeResult = new ExecuteResult();
executeResult.getReturnValues().put("Name", map.get("name"));
return executeResult;
}
@Override
public String toString() {
return "我的服务端命令插件2";
}
}
传递 List 或 Array 之类的集合,统一会转成 list 类型。如果其中的元素为自定义对象类型。list 中的元素取值和 上数自定义对象类型一致。