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

위에서 볼 수 있듯이 @ add 메서드를 super 클래스에 추가하고 Collections.sort()를 하위 클래스에 구현하려고합니다. 그러나 이것을 구현하는 데 도움이되는 비교기를 추가 했으므로 코드에 도달 할 수 없다고 말합니다.비교기를 사용하여 객체의 ArrayList를 정렬하면 코드에 도달 할 수 없습니다.

의견을 보내 주시면 감사하겠습니다.

+1

오류는 'add' 메소드의 첫 번째 행이'return'이므로 오류가 있습니다. 그 이상인 것은 도달 할 수 없습니다. 또한'extends ArrayList' 클래스를 갖기를 원하지 않습니다. – GriffeyDog

+0

메서드가 반환 된 후 실행되지 않습니다. 반환 전에 코드를 넣으십시오. – clinomaniac

+1

'return super.add (pr);'는 다른 코드 행에 도달 할 수 없도록 리턴합니다. 상속에 대해 배우는 것은 좋지만 ArrayList를 확장하는 것은 쉽지 않습니다! 귀하의 예에서는 구성이 더 적절할 것입니다. –

답변

3

당신은 첫 번째 문으로 return 문을, 그래서 아무것도가 도달 할 수없는 코드는 다음과 같습니다 항상 true을 반환

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 때문에, 안전하게 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

실행되지 않습니다 만들기, 함수의 실행을 종료 실행. return은 메소드를 즉시 적용하지 못하게하므로 모든 코드가 실행되지 않으므로 도달 할 수없는 오류가 발생합니다. 이 오류를 없애기 위해 super.add()에서 리턴을 제거 할 수 있습니다.

+0

설명해 주셔서 감사합니다. – mexicanChica