好奇的是++和双重演员

时间:2015-06-03 03:43:09

标签: java casting increment

所以我再次查看代码,我发现了这一点。

   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。

2 个答案:

答案 0 :(得分:2)

以相反的顺序,首先在数组索引中使用i值(所以varargs[0]),然后i递增,以便下一行 i1

接下来,因为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在此行发出不必要的强制警告。