背景:https://dev.to/carey/java-map-keys-should-always-be-comparable-2c1b
我想要达到的目标:
我被困在第二步
noClasses().that()
.containAnyFieldsThat(have(rawType(HashMap.class)))
.should()...
你知道如何得到泛型类的类型吗?谢谢你的支持。
你的ArchLaw
的关键部分(可以直接基于字段()
)可以用一个自定义的Arch条件
来表示:
@ArchTest
static final ArchRule fields_of_type_HashMap_should_have_Comparable_key = fields()
.that().haveRawType(HashMap.class)
.should(new ArchCondition<>("have Comparable key") {
@Override
public void check(JavaField field, ConditionEvents events) {
JavaType fieldType = field.getType();
if (fieldType instanceof JavaParameterizedType) {
JavaType keyType = ((JavaParameterizedType) fieldType).getActualTypeArguments().get(0);
boolean satisfied = keyType.toErasure().getAllRawInterfaces().stream()
.anyMatch(rawInterface -> rawInterface.isEquivalentTo(Comparable.class));
String message = String.format("%s's key (%s) %s Comparable",
field.getDescription(), keyType.getName(), satisfied ? "is" : "is not");
events.add(new SimpleConditionEvent(field, satisfied, message));
} else {
events.add(SimpleConditionEvent.violated(field, field.getDescription() + " is not parameterized"));
}
}
});
我正在尝试修改哈希映射。“value”是由逗号分隔的值组成的单个字符串。(例如:“aid=abc,bid=def,cid=gh2”) 我需要用DB中的相应值替换它们中的特定值。(例如,将bid更改为123,这将导致上述“值”字符串为:“aid=abc,bid=123,cid=gh2”) 然后将修改后的“value”设置为相应的键,以便hashmap由修改后的值组成。 我尝试遍历键,并使用将给出值的
问题内容: 今天,我看到了一个带有Java断言而不是JUnit断言的JUnit测试用例-相对于另一个而言,优先选择一个优点还是缺点? 问题答案: 在JUnit4中,JUnit断言引发的异常(实际上是Error)与java 关键字(AssertionError)引发的错误相同,因此它与堆栈跟踪完全相同,除了您无法分辨出其区别。 话虽这么说,断言必须在JVM中使用特殊标志运行,导致许多测试似乎通过了,
我有一个哈希图,其中一些键指向相同的值。我想找到所有相等的值并打印相应的键。 这是我拥有的当前代码: 当前代码将重复项两次添加到列表中,但它也将每个键添加一次。 谢谢。
问题内容: 考虑以下代码: 程序的输出为: 这里,键如何相互关联。是否所有三个都分配给相同的哈希码?如果是,为什么? 由于这三个值看起来都不同,因此一个值的更改会更改另一个值。这是否意味着只将一个密钥项输入 到任一密钥中,因为所有密钥项都被视为相同的密钥。 问题答案: 当将 null 作为键传递并且null作为特殊情况处理时,不会调用哈希码。 放置方法 将 null 键放在存储区 0中, 并将 n
房间类别 长话短说,这一点是为了添加房间,并能够导航它们,捡起物品,然后放下它们。在我尝试运行程序时,我注意到我不能有多个北/南/东/西键。我怎样才能避开这件事,这样我才能把它做好?