gpt4 book ai didi

java:动态类转换

转载 作者:行者123 更新时间:2023-12-01 09:04:40 26 4
gpt4 key购买 nike

我正在用 java 编写一个 shell 实现,它支持通过将 Command 对象添加到 Map<String, Command> 并编写与此命令关联的类来添加新命令。

commandList.put("sort", new sort()); // sort extends Command

每个命令都有多个 OptionsDefinition<T> ,它们使用 Consumer<T> 对象将选项名称与方法引用相关联(T 是命令的类:例如排序)。

我想让引用的方法非静态,以便能够在我的 shell 中调用同一命令两次,而不混契约(Contract)一命令属性的值,因此我需要传递 thissort 键入到我的排序命令示例中的 Consumer<sort>

我想知道如何改变我所拥有的:

Command sort = commandList.getCommand("sort");

对此:

sort sort = commandList.getCommand("sort");

能够使用

option.getCallback().process(sort); // sort is the reference to this

可以这样做吗?

最佳答案

您可以使用隐式转换来实现 getCommand。

public <C extends Command> C getCommand(String name) {
return (C) commands.get(name);
}

然后你就可以写了

Sort sort = commandMap.getCommand("sort");

注释:

  • 类采用 TitleCase 格式
  • 列表是一个按非负数排序和索引的集合。在 Java 中,您可以将按键索引的集合称为 Map。
  • 您将在该方法中收到未经检查的强制转换警告,因为编译器不知道强制转换是否安全。您可以执行以下操作来关闭此功能:

抑制警告。

public <C extends Command> C getCommand(String name) {
@SuppressWarning("unchecked")
C c = (C) commands.get(name);
return c;
}

关于java:动态类转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41380764/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com