@Override
public boolean add( Object o )
{
return super.add( o );
// Sorts arraylist
Collections.sort(this, new Comparator<Object>() {
// code here
}
});
}
}
正如您所看到的,我正在尝试@Override在超类中找到的方法add,并在子类中实现Collections.sort()。我添加了一个比较器来帮助实现它,但它说代码无法访问。
任何建议都将不胜感激。
答案 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;
}
});
}
}