как установить значения аргумента метода по умолчанию? [дубликат]

Изучение плюсов и минусов

В пользу одинарных кавычек

  • Менее визуальный беспорядок.
  • Генерация HTML: атрибуты HTML обычно разделяются двойными кавычками.

elem.innerHTML = '<a href="' + url + '">Hello</a>';
Однако одинарные кавычки так же допустимы в HTML.

elem.innerHTML = "<a href='" + url + "'>Hello</a>";

Кроме того, встроенный HTML обычно является анти-паттерном. Предпочитаю шаблоны.

  • Генерация JSON: в JSON допускаются только двойные кавычки.

myJson = '{ "hello world": true }';

Опять же, вам не нужно создавать JSON таким образом. JSON.stringify () достаточно часто. Если нет, используйте шаблоны.

В пользу двойных кавычек

  • Двойные буквы легче обнаружить, если у вас нет цветовой кодировки. Как в журнале консоли или в какой-то настройке вида источника.
  • Сходство с другими языками: в программировании оболочки (Bash и т. Д.) Строковые литералы в одинарных кавычках существуют, но экранирование не интерпретируется внутри них. C и Java используют двойные кавычки для строк и одинарные кавычки для символов.
  • Если вы хотите, чтобы код был действительным JSON, вам нужно использовать двойные кавычки.

В пользу обоих

В JavaScript нет разницы между ними. Поэтому вы можете использовать все, что удобно в данный момент. Например, следующие строковые литералы производят одну и ту же строку:

    "He said: \"Let's go!\""
    'He said: "Let\'s go!"'
    "He said: \"Let\'s go!\""
    'He said: \"Let\'s go!\"'

Одинарные кавычки для внутренних строк и двойные для внешних. Это позволяет отличать внутренние константы от строк, которые должны отображаться пользователю (или записываться на диск и т. Д.). Очевидно, вам следует избегать добавления последних в ваш код, но это не всегда можно сделать.

12
задан Jonik 24 June 2009 в 17:05
поделиться

6 ответов

Если ваши аргументы одного типа, вы можете использовать varargs:

public int something(int... args) {
    int a = 0;
    int b = 0;
    if (args.length > 0) {
      a = args[0];
    }
    if (args.length > 1) {
      b = args[1];
    }
    return a + b
}

, но таким образом вы проиграете семантика отдельных аргументов, или

имеет перегруженный метод, который передает вызов параметризованной версии

public int something() {
  return something(1, 2);
}

, или если метод является частью какой-либо процедуры инициализации, вы можете вместо этого использовать шаблон построителя:

class FoodBuilder {
   int saltAmount;
   int meatAmount;
   FoodBuilder setSaltAmount(int saltAmount) {
       this.saltAmount = saltAmount;
       return this;
   }
   FoodBuilder setMeatAmount(int meatAmount) {
       this.meatAmount = meatAmount;
       return this;
   }
   Food build() {
       return new Food(saltAmount, meatAmount);
   }
}

Food f = new FoodBuilder().setSaltAmount(10).build();
Food f2 = new FoodBuilder().setSaltAmount(10).setMeatAmount(5).build();

Затем работайте с объектом Food

int doSomething(Food f) {
    return f.getSaltAmount() + f.getMeatAmount();
}

. Шаблон построителя позволяет вам добавлять / удалять параметры позже, и вам не нужно создавать для них новые перегруженные методы.

15
ответ дан 2 December 2019 в 02:52
поделиться

Вы можете выполнить это с помощью перегрузки метода .

public int doSomething(int arg1, int arg2)
{
        return 0;
}

public int doSomething()
{
        return doSomething(defaultValue0, defaultValue1);
}

Создавая этот метод без параметров, вы разрешаете пользователю вызывать метод с параметрами с аргументами по умолчанию, которые вы предоставляете в реализации метода без параметров. Это известно как перегрузка метода.

48
ответ дан 2 December 2019 в 02:52
поделиться

Вы не можете объявить значения по умолчанию для параметров, например, C # (я полагаю), позволяет вам, но вы можете просто создать перегрузку.

public int doSomething(int arg1, int arg2) {
    //some logic here
    return 0;
}

//overload supplies default values of 1 and 2
public int doSomething() {
    return doSomething(1, 2);
}

Если вы собираетесь сделать что-то вроде этого Пожалуйста, сделайте одолжение всем остальным, кто работает с вашим кодом, и не забудьте упомянуть в комментариях Javadoc, какие значения по умолчанию вы используете!

3
ответ дан 2 December 2019 в 02:52
поделиться

Нет. Java не поддерживает параметры по умолчанию, такие как C ++. Вам необходимо определить другой метод:

public int doSomething()
{
   return doSomething(value1, value2);
}
8
ответ дан 2 December 2019 в 02:52
поделиться

В Java невозможно установить значения по умолчанию. Мой предпочтительный способ справиться с этим - перегрузить метод, чтобы у вас могло получиться что-то вроде:

public class MyClass
{
  public int doSomething(int arg1, int arg2)
  {
    ...
  }

  public int doSomething()
  {
    return doSomething(<default value>, <default value>);
  }
}
2
ответ дан 2 December 2019 в 02:52
поделиться

Вы можете перегрузить метод разными параметрами:

public int doSomething(int arg1, int arg2)
{
//some logic here
        return 0;
}

public int doSomething(
{
doSomething(0,0)
}
1
ответ дан 2 December 2019 в 02:52
поделиться
Другие вопросы по тегам:

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