0

現在、私は責任の連鎖のデザインパターンを研究しており、Eclipseを使用しています。

このコードをコンパイルしようとしていますが、「isLastを解決できないか、フィールドではありません」というコンパイルエラーが発生します。

public class OverFive implements Discount {
    private Discount next; //
    public boolean isLast = false;

    public void setNext(Discount next, boolean Last) {
        this.next = next;
        this.next.isLast = Last; // Here is the error.
    }

    public double DoDiscount(Budget budget) {
        if (budget.getValue() > 500) {
            return budget.getValue() * 0.10;
        }
        if (this.next.isLast == false) {
            return next.DoDiscount(budget);
        }
        else {
            return 0;
        }
    }
}

そして今、ここにインターフェースがあります:

public interface Discount {

    double DoDiscount(Orcamento orcamento);
        void setNext(Discount next, boolean Last);
    }
4

2 に答える 2

1

ここで 1 つの推奨事項があります。Sun Java コーディング標準を研究し、それを心に留めてください。この小さなコード サンプルでは、​​頻繁にそれらを壊しています。

Java では大文字と小文字が区別されます。「discount」は「Discount」と同じではありません。「dodiscount」は「DoDiscount」と同じではありません。

public interface Discount {

    double doDiscount(Orcamento orcamento);
    void setNext(Desconto next, boolean last);
    void setLast(boolean last);
} 

そして実装:

public class OverFive implements Discount {
    private Desconto next;
    private boolean last = false;

    public void setLast(boolean last) {
        this.last = last;
    }

    public void setNext(Desconto next, boolean last) {
        this.next = next;
        this.setLast(last);
      }

    // this method is utter rubbish.  it won't compile.
    public double doDiscount(Orcamento budget){
        if (budget.getValue() > 500){
            return budget.getValue() * 0.10;
        }if (this.next.isLast == false){
            return next.discount(budget);
        }else{
            return 0;
        }   
    }
}

このコードはややこしいと思います。あなたが問題を抱えているのも不思議ではありません。

于 2012-06-10T22:23:46.947 に答える