我正在尝试理解今天遇到的这行代码:
(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/