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

私が見てきたように、スーパークラスにあるメソッドaddをオーバーライドしようとしています。そして、サブクラスでCollections.sort()を実装しています。私はこれを実装するのに役立つコンパレータを追加しましたが、コードに到達できないと言います。コンパイラを使用してオブジェクトのArrayListをソートすると、コードに到達できません

何か提案がありがとうございます。

+1

エラーは、 'add'メソッドの最初の行が' return'なので、そのエラーは到達不能です。また、クラス 'extends'、' ArrayList'を持ちたいとは思わないでしょう。 – GriffeyDog

+0

メソッドは返された後には実行されません。返品の前にコードを入れてください。 – clinomaniac

+1

'return super.add(pr);'は、他のコード行に到達できないように返します。継承について学ぶのは良いですが、ArrayListを拡張することはできません!あなたの例では構成がより適切です。 –

答えて

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)によって返された値を無視し、後にreturn文を追加することができますList並べ替え:

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; 
} 
+0

ありがとうございました。それは今意味があります:) – mexicanChica

1

問題がreturn super.add(pr)あなたがやっているです。 returnキーワードは値を返し、関数の実行を終了し、あなたがしたいコードの残りの部分の前に

return super.add(pr); 

を持っていることを確認し、あなたのコードは、この例では

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

説明のおかげで、私はそれが到達不能だった理由を理解できました。 – mexicanChica

2

を実行されることはありません作ります実行する。戻り値はメソッドを即座に終了させるので、実行していないコードはすべて到達できないため、到達できないエラーが発生します。このエラーを取り除くためにsuper.add()からの戻り値を削除することができます

+0

ありがとうございます – mexicanChica

関連する問題