Действительно ли это необходимо для методов установщика иметь один аргумент?

Вы можете получить высоту экрана и поделить на количество текстовых полей, проверьте этот код:

     @override
      Widget build(BuildContext context) {
        final numberOfTextFields = 5;
        final sizePerItem = MediaQuery.of(context).size.height / numberOfTextFields;
        return SafeArea(
          child: Scaffold(
              resizeToAvoidBottomPadding: true,
              body: SingleChildScrollView(
                child: Column(
                  mainAxisAlignment: MainAxisAlignment.center,
                  children: List.generate(
                    numberOfTextFields,
                    (index) => SizedBox(
                          height: sizePerItem,
                          child: TextField(
                            decoration: InputDecoration(
                              contentPadding: EdgeInsets.all(sizePerItem / 2),
                              hintText: "$index",
                            ),
                          ),
                        ),
                  ).toList(),
                ),
              )),
        );
      }
5
задан W.K.S 2 July 2013 в 11:36
поделиться

4 ответа

Это необходимо конкретно в бобовой модели платформы Java, но это не обязательно в целом.

У Вас может быть метод set без аргумента, когда они предназначены к "swith" значение.

void setCheck()

мог, например, быть предназначен для установки атрибута булевской переменной "проверки" на истинный.

Таким образом, даже если это не "метод set" в бобовом смысле термина Java, можно вообразить метод set используемым для других целей.

Плюс, согласно разделу 7 из спецификаций JavaBean, метод set может иметь больше чем один аргумент, например, для Индексируемых свойств (Индексируемое свойство поддерживает диапазон значений. Каждый раз, когда свойство считано или записано Вы, просто указывают индекс для идентификации, какое значение Вы хотите.)

void setter(int index, PropertyType value); // indexed setter
void setter(PropertyType values[]); // array setter

В Вашем случае допустимый подход должен был бы добавить исключение на этапе выполнения к подписи нашей функции.
Тем путем Вы не помещаете ненужной проверки исключения времени компиляции все другие классы, которые уже называют Ваш метод set.

Или Вы могли рассмотреть свое свойство как свойство Constrained и добавить неисключение на этапе выполнения.

Ограниченные методы установщика свойства требуются, чтобы поддерживать PropertyVetoException. Это документирует пользователям ограниченного свойства, которое попыталось, на обновления можно наложить вето. Таким образом, простое ограниченное свойство могло бы быть похожим:

PropertyType getFoo();
void setFoo(PropertyType value) throws PropertyVetoException;

который позволяет, чтобы VetoableChangeListener был добавлен в случае необходимости.


Относительно Вашего отрывка это "допустимо", но не может быть оптимально потому что (как сказано в этом вопросе):

  • Проверка должна быть получена отдельно от методов считывания или методов set в методе проверки. Тот путь, если проверка должна быть снова использована через несколько компонентов, это доступно.
  • Лучше не удаться быстро (следовательно мое суждение добавить исключение к методу set).
12
ответ дан 18 December 2019 в 07:57
поделиться

Почему нет. Проверка и проверка входа являются хорошим вариантом для включения в метод set. Вопрос здесь, если Вы хотите позволить устанавливать участника без проверки.

Возможно Вам нужна стандартная форма метода set для некоторой платформы, которую Вы используете (использование в качестве боба). Но если Вы не ограничиваетесь таким образом, Вы могли бы попробовать это.

Вы могли также использовать, утверждает в методе set, если Вы думаете, что другой код должен сделать проверку, но неправильные значения никогда не должны устанавливать.

2
ответ дан 18 December 2019 в 07:57
поделиться

В книге "Эффективный Java 2-й Выпуск" Joshua Bloch (ISBN-13: 978-0-321-35668-0) saids, который лучше использовать шаблон разработчика, чем бобовая конвенция для созданий объектов.

Например (шаблон компонентов):

NutritionFacts cocaCola = new NutritionFacts();
cocaCola.setServingSize(240);
cocaCola.setServings(8);
cocaCola.setCalories(100);
cocaCola.setSodium(35);
cocaCola.setCarbohydrate(27);

Использование с шаблоном разработчика:

NutritionFacts cocaCola = new NutritionFacts.Builder(240, 8).
   calories(100).
   sodium(35).
   carbohydrate(27).
   build();

Реализация шаблона разработчика:

// Builder Pattern
public class NutritionFacts {
    private final int servingSize;
    private final int servings;
    private final int calories;
    private final int fat;
    private final int sodium;
    private final int carbohydrate;
    public static class Builder {
        // Required parameters
        private final int servingSize;
        private final int servings;
        // Optional parameters - initialized to default values
        private int calories = 0;
        private int fat = 0;
        private int carbohydrate = 0;
        private int sodium = 0;
        public Builder(int servingSize, int servings) {
            this.servingSize = servingSize;
            this.servings = servings;
        }
        public Builder calories(int val)
        { calories = val; return this; }
        public Builder fat(int val)
        { fat = val; return this; }
        public Builder carbohydrate(int val)
        { carbohydrate = val; return this; }
        public Builder sodium(int val)
        { sodium = val; return this; }
        public NutritionFacts build() {
            return new NutritionFacts(this);
        }
    }
    private NutritionFacts(Builder builder) {
        servingSize = builder.servingSize;
        servings = builder.servings;
        calories = builder.calories;
        fat = builder.fat;
        sodium = builder.sodium;
        carbohydrate = builder.carbohydrate;
    }
}

Когда первые две площади аргументов потребовали.
Для проверки можно использовать раннюю проверку (в каждом <field> метод) или ленивая проверка (в сборке () метод). И формат является видом инициализации значения ключа Python.

1
ответ дан 18 December 2019 в 07:57
поделиться

Java Бобовый метод set спецификации имеют один аргумент. Если Вы добавляете другой по любой причине, это больше не считают методом set.

Метод set совершенно допустим, чтобы "очистить" его аргумент или выдать исключение, если недопустимо.

5
ответ дан 18 December 2019 в 07:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: