所以我再次查看代码,我发现了这一点。
public ProtoTableShapedRecipe addRecipe(ItemStack stack, Object ... varargs){
int i = 0;
...
...
...
String[] astring = (String[])((String[])varargs[i++]);
}
我想知道的是为什么需要两个String []的转换,当涉及将变量i
传递给varargs[]
时,它会考虑值1并使{ {1}} 1或者只是在传递i
时向其中添加1,i
保持为0。
答案 0 :(得分:2)
以相反的顺序,首先在数组索引中使用i
值(所以varargs[0]
),然后i
递增,以便下一行 i
是1
。
接下来,因为varargs
或类型Object[]
。仅在String[]
(s)(并且您忘记了开头{
)时才使用该演员表是安全的。像
public ProtoTableShapedRecipe addRecipe(ItemStack stack,
String[]... varargs) {
int i = 0;
// ...
String[] astring = varargs[i++]; // <-- varargs[0]
// i = 1
}
答案 1 :(得分:0)
这里不需要双重演员。只需一次演员即可:
String[] astring = (String[])varargs[i++];
现代IDE在此行发出不必要的强制警告。