Java 使用比较器对对象的ArrayList进行排序,代码是不可访问的 @覆盖 公共布尔加法(对象o) { 返回super.add(o); //排序数组列表 Collections.sort(这个,新的Comparator(){ //代码在这里 } }); } }

Java 使用比较器对对象的ArrayList进行排序,代码是不可访问的 @覆盖 公共布尔加法(对象o) { 返回super.add(o); //排序数组列表 Collections.sort(这个,新的Comparator(){ //代码在这里 } }); } },java,sorting,inheritance,arraylist,comparator,Java,Sorting,Inheritance,Arraylist,Comparator,如您所见,我正试图@Override方法add(在超类中找到),并在子类中实现Collections.sort()。我添加了一个比较器来帮助实现这一点,但是,它表示代码是不可访问的 如果您有任何建议,我们将不胜感激。您的第一条语句是return语句,因此下面的任何内容都是无法访问的代码: @Override public boolean add( Object o ) { return super.add( o ); // Sorts arraylist Co

如您所见,我正试图@Override方法add(在超类中找到),并在子类中实现Collections.sort()。我添加了一个比较器来帮助实现这一点,但是,它表示代码是不可访问的


如果您有任何建议,我们将不胜感激。

您的第一条语句是return语句,因此下面的任何内容都是无法访问的代码:

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

您有一个return语句作为第一个语句,因此它后面的任何内容都是无法访问的代码:

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

问题是您正在执行的
返回super.add(pr)
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;
}
public类BetterBasket可序列化
{
私有静态最终长serialVersionUID=1L;
@凌驾
公共布尔添加(产品请购单)
{ 
return super.add(pr);//返回super.add(pr)返回的值并结束函数
Collections.sort(这个,新的Comparator(){
@凌驾
公共整数比较(产品p1、产品p2){
双f=p1.getPrice();
双s=p2.getPrice();
如果(f==s)返回0;

return f问题在于您正在执行的
return super.add(pr)
操作。
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;
}
public类BetterBasket可序列化
{
私有静态最终长serialVersionUID=1L;
@凌驾
公共布尔添加(产品请购单)
{ 
return super.add(pr);//返回super.add(pr)返回的值并结束函数
Collections.sort(这个,新的Comparator(){
@凌驾
公共整数比较(产品p1、产品p2){
双f=p1.getPrice();
双s=p2.getPrice();
如果(f==s)返回0;

在本例中,返回f

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;
    }
   });
  }
}

在您要执行的其余代码之前。Return立即终止该方法,因此在该方法之后的所有代码将永远不会运行,这就是为什么会出现无法访问的错误。您只需从super.add()中删除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;
    }
   });
  }
}

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

此错误是因为
add
方法的第一行是
return
,因此超出该行的任何内容都无法访问。此外,您不太可能希望有一个类
extend
ArrayList
。该方法不会在返回后运行。请将代码放在返回之前。
return super.add(pr);
返回,因此无法访问其他代码行。了解继承是好的,但扩展ArrayList不是!在您的示例中,组合可能更合适。错误是因为
add
方法的第一行是
return
,因此无法访问超出该行的任何内容。此外,您也不太可能希望使类
extend
ArrayList
。该方法在返回后不会运行。将代码放在返回之前。
return super.add(pr);
返回,因此无法访问其他代码行。了解继承很好,但扩展ArrayList不行!在您的示例中,组合可能更合适。非常感谢。现在有意义:)非常感谢。现在有意义:)谢谢你的解释谢谢你的解释谢谢你的解释,让我明白了为什么它是无法到达的。谢谢你的解释,让我明白了为什么它是无法到达的。