我正在学习如何在从C开始之后使用Java进行编码。在C中,我总是将所有内容分成单独的函数,以使代码更易于遵循和编辑。我试图在java中这样做但是现在因为我意识到你不能使用指针,我有点困惑的是最好的方法是什么。
所以例如我想要一个为我创建四个警报的方法。所以我传递了一个警报构建器,然后可以创建警报。我可以在一个数组中返回它们,但是在我的代码中我已经有单独命名的警报,我想保持这种方式,所以我不需要将它们称为alert [1],alert [2]。 ..等等。
这意味着我必须重命名它们,这会添加额外的代码,这些代码可能比实际方法中的代码更长!
我是否正确地思考这个问题?我有什么可以做的吗?
-Edit-
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();
将代码放在某处。
答案 0 :(得分:6)
听起来你想要一个方法为你创建四个对象并返回它们。您有几个选择:
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)详细程度可以是好事
答案 1 :(得分:1)
这四个警报是否相关?你能创建一个适当的类来封装其中的四个,包括创建它们的代码吗?
我很少发现我需要一种方法来返回多个不相关的项目 - 尽管我偶尔会错过C#的out
参数,例如int.TryParse
(方法可能会“失败”)以非特殊方式)。
答案 2 :(得分:0)
我会将这些警报包装在Alert类中。根据差异,可以是同一类的对象,也可以是4个不同的类。
然后,您可以将这些对象传递给您的函数以初始化它们。
然后你的能力结构不会发生太大变化。
这不是在Javaland中完成任务的方式,但它说明了为什么缺少指针不会带来重大问题。在Java中,类主要在其构造函数中进行配置,因此创建,操作和销毁的完整生命周期将封装在类中。 (这有点近似)。这允许类从外部“隐藏”实现细节,这有助于构建更强大的应用程序。
答案 3 :(得分:0)
这里有一些很好的答案,尤其是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连接所有警报,然后将它们作为集合注入。