[英]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();
並將該代碼放在某處。
聽起來你想要一個方法為你創建四個對象並返回它們。 你有幾個選擇:
Alert foo = createOneAlert(x,y,z);
Alert bar = createOneAlert(a,b,c);
// etc.
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.