java - 声纳:将同步类“Hashtable”替换为非同步类,例如“HashMap”
问题描述
我无法用哈希表替换哈希表,因为我使用的方法接收哈希表:
private Context getInitialContext() throws NamingException {
final Hashtable<String, Object> jndiProperties = new Hashtable<>();
jndiProperties.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming");
// This "new InitialContext()" receives a Hastable, and I can't modify that
// because that is part of a jar
// "javax.naming.InitialContext.InitialContext(Hashtable<?, ?> environment)
// throws NamingException"
context = new InitialContext(jndiProperties);
return context;
}
InitialContext 方法:
public InitialContext(Hashtable<?,?> environment)
throws NamingException
{
if (environment != null) {
environment = (Hashtable)environment.clone();
}
init(environment);
}
我能做些什么来解决这个代码问题?
解决方案
如果您必须让 SonarQube 满意并使用,请InitialContext
考虑使用
Properties
请参阅: https ://docs.oracle.com/javase/8/docs/api/java/util/Properties.html
所以而不是:
final Hashtable<String, Object> jndiProperties = new Hashtable<>();
利用:
final Properties jndiProperties = new Properties();
JavaDocs 中的注释:
因为 Properties 继承自 Hashtable,所以 put 和 putAll 方法可以应用于 Properties 对象。强烈建议不要使用它们,因为它们允许调用者插入键或值不是字符串的条目。应该改用 setProperty 方法。如果在包含非字符串键或值的“受损”属性对象上调用存储或保存方法,则调用将失败。类似地,如果在包含非字符串键的“受损”属性对象上调用 propertyNames 或 list 方法,则调用将失败。
这意味着您的原始代码示例应如下所示:
private Context getInitialContext() throws NamingException {
final Properties jndiProperties = new Properties();
jndiProperties.setProperty(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming");
// This "new InitialContext()" receives a Hastable, and I can't modify that
// because that is part of a jar
// "javax.naming.InitialContext.InitialContext(Hashtable<?, ?> environment)
// throws NamingException"
context = new InitialContext(jndiProperties);
return context;
}
推荐阅读
- swift - XCTest, XCTWaiter 等待乘法异常
- python - 以下程序的时间和空间复杂度是多少?- leetcode 1291
- html - CSS:如何防止锚链接在固定标题后面滚动?
- java - 将 SIM 设置为默认 SIM 以发送 SMS 消息并以编程方式在 android 中拨打电话
- javascript - 计算两个坐标之间的距离,考虑高度变化的短距离
- python - 如何在不使用相同用户名两次的情况下将用户名存储在 txt 文件中?
- flutter - 在颤动的汉堡菜单图标上添加徽章
- python - 是否可以在 pySpark 中修改输出数据文件名?
- docker - db连接错误节点-mysql docker容器
- amazon-web-services - ESP32 如何检索存储在 Amazon S3 数据库中的代码并立即执行?