java - 多次类型转换

标签 java casting

我正在尝试理解今天遇到的这行代码:

(int[])((int[])((Object[])((Object[])this.mapping.get(index)))[0])

其中mapping是一个 vector 。

当假设条目的类型为 int[] 时,可以简单地完成 (int[])this.mapping.get(index) ,似乎有多余的转换和从 Object[] 到 int[] 的不必要的转换。谁能向我解释为什么需要上面的表达式?谢谢

最佳答案

由于所有这些括号都难以阅读,因此这里有一个匹配:

(int[])((int[])((Object[])((Object[])this.mapping.get(index)))[0])
│     │││     │││        │││        │                │     │││   │
└─────┘│└─────┘│└────────┘│└────────┘                └─────┘││   │
       │       │          └─────────────────────────────────┘│   │
       │       └─────────────────────────────────────────────┘   │
       └─────────────────────────────────────────────────────────┘

分解,显示评估顺序:

                                     this
                                         .mapping
                                                      index
                                                 .get(     )
                          ((Object[])                       )
               ((Object[])                                   )
                                                              [0]
       ((int[])                                                  )
(int[])                                                           

如您所见,第二个 Object[] 都是 Actor 阵容和第二个int[] Actor 阵容是多余的。

代码可以简化为:

(int[]) ((Object[]) this.mapping.get(index))[0]

或者更简单:

((int[][]) this.mapping.get(index))[0]

如果 mapping 就更好了被声明为 Vector<int[][]> ,代码将很简单:

this.mapping.get(index)[0]

关于java - 多次类型转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45871506/

相关文章:

Java:构建器、继承、泛型 Redux

java - Java中的字符编码

C: 将 int 转换为 size_t

Java:接口(interface)

c - C 中的字符串转换对性能有何影响?

c++ - 类型转换运算符重载问题

java - 反射(reflect) Spring 应用程序在运行时配置中所做的更改,而无需重建它

java - 在 testng @AfterMethod 中检测测试失败

java - 通过 Java 从 Javascript 更改填充多个 HTML 语句

c - C/Cython 中的动态类型转换