Java 使用比较器对对象的ArrayList进行排序,代码是不可访问的 @覆盖 公共布尔加法(对象o) { 返回super.add(o); //排序数组列表 Collections.sort(这个,新的Comparator(){ //代码在这里 } }); } }
如您所见,我正试图@Override方法add(在超类中找到),并在子类中实现Collections.sort()。我添加了一个比较器来帮助实现这一点,但是,它表示代码是不可访问的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
如果您有任何建议,我们将不胜感激。您的第一条语句是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不行!在您的示例中,组合可能更合适。非常感谢。现在有意义:)非常感谢。现在有意义:)谢谢你的解释谢谢你的解释谢谢你的解释,让我明白了为什么它是无法到达的。谢谢你的解释,让我明白了为什么它是无法到达的。