簡體   English   中英

由於您無法通過引用傳遞,因此組織Java代碼的最佳方法是什么?

[英]What is the best way to organize Java code since you can't pass by reference?

我從C學習后學習如何使用Java進行編碼。在CI中,總是將所有內容分成單獨的函數,以使代碼更易於遵循和編輯。 我試圖在java中這樣做,但現在我意識到你不能使用指針,我有點困惑,最好的方法是什么。

所以例如我想要一個為我創建四個警報的方法。 所以我傳遞了一個警報構建器,然后可以創建警報。 我可以在一個數組中返回它們,但是在我的代碼中我已經有單獨命名的警報,我想保持這種方式,所以我不需要將它們稱為alert [1],alert [2]。 ......等

所以這意味着我必須重命名它們,這將添加額外的代碼,這可能比實際方法中的代碼更長!

我是否正確地思考這個問題? 有什么我能做的嗎?

-編輯-

        AlertDialog.Builder builder = new AlertDialog.Builder(this);

        builder.setMessage(this.getString(R.string.ache_Q_text))
               .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                   public void onClick(DialogInterface dialog, int id) {dialog.cancel();}
               });

        final AlertDialog ache_Q_alert = builder.create();

        builder.setMessage(this.getString(R.string.food_Q_text));
        final AlertDialog food_Q_alert = builder.create();

        builder.setMessage(this.getString(R.string.event_Q_text));
        final AlertDialog event_Q_alert = builder.create();

        builder.setMessage(this.getString(R.string.ache_Q_text));
        final AlertDialog ache_type_Q_alert = builder.create();

而是用它替換它

createAlerts();

並將該代碼放在某處。

聽起來你想要一個方法為你創建四個對象並返回它們。 你有幾個選擇:

1.修改你的方法只創建一個對象,並調用它四次,例如

Alert foo = createOneAlert(x,y,z);
Alert bar = createOneAlert(a,b,c);
// etc.

2.創建一個數據結構來保存警報:

public class Alerts {
  private final Alert foo;
  private final Alert bar;
  private final Alert baz;
  private final Alert quux;

  public Alerts(Alert foo, Alert bar, Alert baz, Alert quux) {
    this.foo = foo;
    this.bar = bar;
    this.baz = baz;
    this.quux = quux;
  }

  public Alert getFoo() { return foo; }
  // etc.

}

public Alerts makeAlerts(AlertBuilder builder) {
  return new Alerts(
    builder.buildAlert(a,b,c),
    builder.buildAlert(d,e,f),
    builder.buildAlert(g,h,i),
    builder.buildAlert(x,y,z));  
}

它可能更冗長,但a)Java和b)詳細程度可能是一件好事

這四個警報是否相關? 你能創建一個適當的類來封裝其中的四個,包括創建它們的代碼嗎?

我很少發現我需要一個方法來返回多個不相關的項目 - 雖然我偶爾會錯過C#的out參數,例如int.TryParse (其中一個方法可能以非特殊的方式“失敗”)。

我會將這些警報包裝在Alert類中。 根據差異,可以是同一類的對象,也可以是4個不同的類。

然后,您可以將這些對象傳遞給函數以初始化它們。

然后你的結構不會改變很多。

這不是在Javaland中完成任務的方式,但它說明了為什么缺少指針不會帶來重大問題。 在Java中,類主要在其構造函數中進行配置,因此創建,操作和銷毀的完整生命周期將封裝在類中。 (這有點近似)。 這允許類從外部世界“隱藏”實現細節,這有助於構建更強大的應用程序。

這里有一些很好的答案,尤其是davetron5000。

另一種選擇是將列表(或其他集合)傳遞到createAlerts(); 方法 - 有或沒有建設者。 也許是這樣的:

List<Alert> alerts = new ArrayList<Alert>();
createAlerts(builder, alerts);
...

private void createAlerts(AlertBuilder builder, List<Alert> alerts) {
    alerts.add(builder.buildAlert(a,b,c));
    alerts.add(builder.buildAlert(d,e,f));
    alerts.add(builder.buildAlert(g,h,i));
    alerts.add(builder.buildAlert(x,y,z));
}

你也可以戴上你的Spring帽子並用XML連接所有警報,然后將它們作為一個集合注入。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM