Я изучаю, как кодировать в Java после того, как после прибытия из C. В C я всегда разделял все на отдельные функции для создания кода легче следовать и отредактировать. Я пытался сделать это в Java, но теперь так как я понял, что Вы не можете использовать указатели, я немного смущен относительно того, каково лучший способ сделать это.
Так, например, я хочу иметь метод, который создает четыре предупреждения для меня. Таким образом, я передаю его внимательный разработчик, который может затем создать предупреждения. Я могу возвратить их в массиве, но в моем коде мне уже назвали предупреждения индивидуально, и я хотел бы сохранить его тем путем, таким образом, я не должен буду называть их предупреждением [1], предупреждение [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));
}
Это может быть более многословным, но а) это Java и б) многословность может быть хорошей вещью
.Я бы заключил эти предупреждения в класс предупреждений. В зависимости от разницы, как объекты одного класса или как 4 разных класса.
Затем вы можете передать эти объекты своей функции для их инициализации.
Тогда структура вашего не могла бы сильно измениться.
В Javaland это не так, но он показывает, почему отсутствие указателей не создает серьезных проблем. В Java классы в основном настраиваются в их конструкторе, поэтому полный жизненный цикл создания, работы и уничтожения инкапсулируется в классе. (Это что-то вроде приближения). Это позволяет классу «скрывать» детали реализации от внешнего мира, что помогает создавать более надежные приложения.
Связаны ли эти четыре предупреждения? Не могли бы вы создать соответствующий класс, который инкапсулирует четыре из них, включая код для их создания?
Я редко нахожу, что мне нужен метод для возврата нескольких несвязанных элементов - хотя я иногда скучаю по C # out
параметры для таких вещей, как int.TryParse
(где метод может «дать сбой» неисключительным образом).
Здесь есть несколько хороших ответов, особенно 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, а затем внедрить их как коллекцию.