如何在IntelliJ中使用byte []的数据类型呈现器列表

时间:2014-09-17 00:51:22

标签: 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相同。

1 个答案:

答案 0 :(得分:0)

我回答了similar question here。有关无法将ScrollableControlDesigner强制转换为_Dummy_.__Array__<T>的消息听起来像是一个IntelliJ错误,它无法确定调用堆栈中类的名称。也许为byte[]的其他“形式”添加DTR会有所帮助。我在下面列出了三个DTR的示例 - byte[]byte[]Byte[]

测试和帮助器方法(用Groovy编写,所以确保它在你的类路径上或用纯Java重写):

ArrayList

对于您要定义的每个DTR,只需将上面定义的确切字符串复制到渲染节点时&gt;使用以下表达式字段。我建议将实用程序方法放在类路径的源类而不是测试中,因为每次构建都需要在DTR对话框中重新导入测试类,因为@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) } 被清除了。

Successful test execution

DTR for ArrayList in action