亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

自定義或者Java中的操作

自定義或者Java中的操作

慕虎7371278 2023-08-16 10:10:47
對于 Java 項目,我創建了一個自定義布爾類(名為 Result),它可以具有三個值:True、False 或 Undefined。我定義了兩個函數:“or”和“and”,規則如下:    public static Result or(Result r1, Result r2) {        if(r1.isTrue() || r2.isTrue()){            return V(); //new Result with value "True";        } else if(r1.isUndefined() || r2.isUndefined()) {            return U(); //new Result with value "Undefined";        }  else {            return F(); //new Result with value "False";        }    }    public static Result and(Result r1, Result r2) {        if(r1.isFalse() || r2.isFalse()){            return F(); //new Result with value "False";        } else if(r1.isUndefined() || r2.isUndefined()) {            return U();//new Result with value "Undefined";        }  else {            return V(); //new Result with value "True";        }    }這是可行的,但在很多情況下,它效率不高,因為我需要在計算“or”或“and”的返回之前計算兩個 Result 的值:如果我做if(f1() || f2()){}并且f1()的結果為True,f2()將永遠不會被執行以節省計算時間。是否有解決方案可以使我的自定義類具有相同的行為?
查看完整描述

1 回答

?
守著星空守著你

TA貢獻1799條經驗 獲得超8個贊

您可以使用Supplier以獲得類的“延遲”執行Result:


public static Result or(Supplier<Result> r1Supplier, Supplier<Result> r2Supplier) {

        Result r1 = r1Supplier.get();

        if(r1.isTrue()){

            return V(); //new Result with value "True";

        } else if(r1.isUndefined()) {

            return U(); //new Result with value "Undefined";

        }  else {

            // only here you need to handle r2 

            Result r2 = r2Supplier.get();

            if(r2.isTrue()){

                return V(); //new Result with value "True";

            } else if(r2.isUndefined()) {

                return U(); //new Result with value "Undefined";

            }  else {

                return F();

            }

        }

    }

它可以稍微清理一下并排序得更好,但你會掌握它的竅門


查看完整回答
反對 回復 2023-08-16
  • 1 回答
  • 0 關注
  • 109 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號