使用比较器对对象的ArrayList进行排序,代码无法访问

时间:2017-12-19 15:37:38

标签: java sorting inheritance arraylist comparator

  @Override
  public boolean add( Object o )
  { 
    return super.add( o );
   // Sorts arraylist
    Collections.sort(this, new Comparator<Object>() {
    // code here
    }
   });
  }
}

正如您所看到的,我正在尝试@Override在超类中找到的方法add,并在子类中实现Collections.sort()。我添加了一个比较器来帮助实现它,但它说代码无法访问。

任何建议都将不胜感激。

3 个答案:

答案 0 :(得分:3)

你有一个return语句作为第一个语句,所以跟随它的任何东西都是无法访问的代码:

public boolean add( Product pr )
{ 
    return super.add(pr);
    Collections.sort(this, new Comparator<Product>() { // unreachable
    @Override
    public int compare(Product p1, Product p2) {
        double f = p1.getPrice();
        double s = p2.getPrice();
        if (f == s) return 0;
        return f<s ? 1 : -1;
    }
   });
}

由于List.add始终返回true,您可以放心地忽略super.add(pr)返回的值,并在对List进行排序后添加一个return语句:

public boolean add( Product pr )
{ 
    super.add(pr);
    Collections.sort(this, new Comparator<Product>() {
    @Override
    public int compare(Product p1, Product p2) {
        double f = p1.getPrice();
        double s = p2.getPrice();
        if (f == s) return 0;
        return f<s ? 1 : -1;
    }
   });
   return true;
}

答案 1 :(得分:2)

在这种情况下,你有

return super.add( pr );

在您要执行的其余代码之前。返回终止方法imediatally所以你之后的所有代码将永远不会运行,这就是为什么你得到无法访问的错误。您可以从super.add()中删除返回以消除此错误

答案 2 :(得分:1)

问题在于你正在做return super.add( pr )return关键字返回值并结束函数的执行,确保您的代码永远不会被执行

public class BetterBasket extends Basket implements Serializable
{
  private static final long serialVersionUID = 1L;

  @Override
  public boolean add( Product pr )
  { 
    return super.add( pr ); // returns the value returned by super.add( pr ) and ends the function
    Collections.sort(this, new Comparator<Product>() {
    @Override
    public int compare(Product p1, Product p2) {
        double f = p1.getPrice();
        double s = p2.getPrice();
        if (f == s) return 0;
        return f<s ? 1 : -1;
    }
   });
  }
}