Ken*_*nny 7 java intellij-idea intellij-13
所以我有所有这些byte []的,它们的编码可能是许多不同格式之一,具体取决于我当前正在调试的位置.我希望能够将字节数组的投影列表组合在一起.我正在使用IntelliJ的数据类型呈现器视图,应用渲染器来键入byte [],我主要关注表达式列表框.
所以我已经看到了如何使用表达式呈现节点new String(this),但是这在下面的表达式视图列表中不起作用.最后,我想去做的表达式new String(this, "UTF16")(或者说转换为十六进制或Base64或W/E),但this似乎并没有成为一个byte []中的表达式列表框中-事实上,当我试图像强制转换(byte[])this的结果说Inconvertible types; cannot cast '_Dummy_.__Array__?T?' to 'byte[]'( java.lang.Byte [])的相同行为.这真是奇怪的行为,在一个地方它是一个字节[]而在另一个地方它是一些不透明的内部类型.
什么工作只是显示字段 - 即表达式像this.length预期的那样工作.此外,表达式this只是简单地重新呈现节点,声称其类型为byte [],其对象id与原始id相同.
我在这里回答了类似的问题。_Dummy_.__Array__<T>有关无法转换为的消息byte[]听起来像是一个 IntelliJ 错误,它无法确定调用堆栈中的类的名称。也许为其他“形式”添加 DTRbyte[]会有所帮助。我在下面提供了三个 DTR 的示例 - byte[]、Byte[]和ArrayList。
测试和辅助方法(用 Groovy 编写,因此请确保它位于类路径中或用纯 Java 重写):
@Test
void testShouldHandleDTR() {
// Arrange
byte[] primitiveArray = "90abcdef".bytes
Byte[] objectArray = "90abcdef".bytes
List<Byte> objectList = "90abcdef".bytes
final String EXPECTED_STRING = Hex.encodeHexString(primitiveArray)
logger.info("Expected hex string: ${EXPECTED_STRING}")
// Fully qualified for DTR dialog
String primitiveDTR = "org.bouncycastle.util.encoders.Hex.toHexString(this);"
String objectArrayDTR = "org.example.ThisTest.encodeObjectArrayToHex(this);"
String objectListDTR = "org.example.ThisTest.encodeObjectArrayToHex(this.toArray());"
def types = [primitiveArray, objectArray, objectList]
def expressions = [(primitiveArray.class.name): primitiveDTR,
(objectArray.class.name): objectArrayDTR,
(objectList.class.name): objectListDTR]
// Act
types.each { it ->
logger.info("Contents: ${it}")
logger.info("Type: ${it.class.name}")
String result = Eval.x(it, expressions[it.class.name].replaceAll(/this/, "x"))
logger.info("Result: ${result}")
// Assert
assert result == EXPECTED_STRING
}
}
public static String encodeObjectArrayToHex(Object[] objectArray) {
byte[] primitiveArray = objectArray.collect { it as byte }
Hex.encodeHexString(primitiveArray)
}
Run Code Online (Sandbox Code Playgroud)
对于要定义的每个 DTR,只需将上面定义的确切字符串复制到“渲染节点时 > 使用以下表达式”字段中。我建议将实用程序方法放入类路径上的源类中,而不是测试中,因为在每个构建中,您都必须在 DTR 对话框中重新导入测试类,因为测试类会被target/清理。
| 归档时间: |
|
| 查看次数: |
1739 次 |
| 最近记录: |