如何解决如何修复导致 Netty 4 中 IllegalArgumentException 的 AttributeKey
我正在将 Netty 3 应用程序移植到 Netty 4。Netty 3 应用程序使用 Attachement
将对象附加到上下文。
阅读 New and noteworthy in 4.0 我看到附件已被删除并替换为 AttributeKey/AttributeMap。
问题是当我运行应用程序时这有效,但在集成测试中,我收到错误:
Caused by: java.lang.IllegalArgumentException: 'attr_key' is already in use
在可共享处理程序中定义 attr_key
的位置如下:
private final AttributeKey<Object> ATTR_KEY = AttributeKey.newInstance("attr_key");
然后在同一个处理程序类中的其他地方使用,如下所示:
channel.attr(ATTR_KEY).set(new Object())
关于使用 AttributeKey/AttributeMap 来防止此错误的推荐方法的任何想法或想法?谢谢!
解决方法
使用属性键时,请确保只构造它们 1 次。
这意味着,您需要将它们存储在 private static final
变量中,private final
变量不够好,因为多次构造类时会出错。
如果无法确保方法newInstance
被调用一次,则需要使用AttributeKey.valueOf
,因此关闭冲突检测。这是某些单元测试框架所必需的,其中库加载了 1 次,但应用程序代码会动态重新启动。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。