重复的局部变量“附加”错误?

时间:2013-02-28 09:36:18

标签: java

我正在尝试调试代码的一部分,但是存在“重复的局部变量”错误。我该如何解决这个问题呢?我不确定错误是什么,所以我在这里问。

public JumpPlusPlayer(JumpPlus plugin, Player p) {
    loadPermissions(p, plugin);
    fillConfig(plugin);
  }

  protected void loadPermissions(Player p, JumpPlus plugin) {
      HashSet<PermissionAttachmentInfo> perms = new HashSet<PermissionAttachmentInfo>();
    PermissionAttachment attach;
    if (plugin.usingPEX) {
      PermissionUser user = PermissionsEx.getUser(p);
      String world = p.getWorld().getName();
      attach = new PermissionAttachment(plugin, p);
      for (String perm : user.getPermissions(world)) {
        String expression = user.getMatchingExpression(perm, world);
        perms.add(new PermissionAttachmentInfo(p, perm, attach, user.explainExpression(expression)));
      }
    } else {
      perms = (HashSet<PermissionAttachmentInfo>) p.getEffectivePermissions();
    }

    for (PermissionAttachmentInfo attach : perms) {
      String perm = attach.getPermission();
      if (perm.contains("jumpplus.config.")) {
        String[] aux = perm.split("jumpplus.config.");
        aux = aux[1].split("-");
        if (aux[0].equals("hspeed"))
          this.hSpeed = Double.valueOf(Double.parseDouble(aux[1]));
        else if (aux[0].equals("vspeed"))
          this.vSpeed = Double.valueOf(Double.parseDouble(aux[1]));
        else if (aux[0].equals("maxjumps"))
          this.maxJumps = Integer.valueOf(Integer.parseInt(aux[1]));
        else if (aux[0].equals("maxfreejumps"))
          this.maxFreeJumps = Integer.valueOf(Integer.parseInt(aux[1]));
        else if (aux[0].equals("jumpcost"))
          this.jumpCost = Integer.valueOf(Integer.parseInt(aux[1]));
        else if (aux[0].equals("fallmodifier"))
          this.fallModifier = Integer.valueOf(Integer.parseInt(aux[1]));
        else if (aux[0].equals("particleeffect"))
          this.particleEffect = Boolean.valueOf(Boolean.parseBoolean(aux[1]));
        else if (aux[0].equals("defaultstate"))
          this.enable = Boolean.valueOf(Boolean.parseBoolean(aux[1]));
      }
    }
  }

2 个答案:

答案 0 :(得分:2)

  

我如何解决此问题?

嗯,不要在同一范围内两次声明局部变量?

在增强的for循环中使用不同的局部变量名,或者将第一个的声明移到if语句中:

PermissionAttachment attach = new PermissionAttachment(plugin, p);

(你没有if语句之外使用,所以为什么要在开始时声明呢?)

答案 1 :(得分:0)

问题在于您的loadPermissions方法,特别是这两行:

PermissionAttachment attach;
for (PermissionAttachmentInfo attach : perms) {

第一行声明一个名为attach的局部变量(仅存在于该方法调用中的变量)。第二行声明了一个名为attach的局部变量,但由于它已经存在,因此无法执行此操作。你需要为其中一个选择一个不同的名称。