gpt4 book ai didi

Java:每台机器上每次调用的反射都相同吗?

转载 作者:行者123 更新时间:2023-12-01 09:48:22 24 4
gpt4 key购买 nike

这是一个奇怪的问题。我有一个使用 java 反射用类集合填充列表的方法。

    import org.reflections.Reflections;
...
Reflections reflections = new Reflections("network.packet");
Class<?>[] packets = new Class<?>[256];
for (Class<?> c : reflections.getSubTypesOf(Packet.class))
{
try {
byte opcode = ((Packet)c.newInstance()).getOpcode();
packets[opcode] = c;
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

GetOpcode 返回一个字节,将一个字节注册到数据包中。我想知道是否可以通过提供操作码映射的自动解决方案来使我的代码对 API 更加友好。目前,我在扩展 Packet 的类中强制使用注册操作码的字节调用 super 构造函数。

setOpcode(byte num)

为此类设置操作码。

我的问题在于我是否可以相信 org.reflection 每次在每台机器上都以相同的方式运行来计算代码,而不是对它们进行硬编码,并使 API 的用户不会踩到已经存在的代码.

那么,有人知道吗?

最佳答案

org.reflections 不计算代码 - 您只是使用它来迭代提供代码的 Packet 子类型。

只要您的所有 Packet 扩展都位于类路径上(并且它们都提供适合该数组的唯一代码),那么就可以了。

至于“更好的方法” - 您可以考虑“注册”机制(即:将 Packet 类插入注册表中)而不是“发现”机制(即:从类路径中提取 Packet 类)您现在正在使用 - 是否更好取决于您的最终用例。

关于Java:每台机器上每次调用的反射都相同吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37793845/

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