Предпочитают сеттеры (Ломбок) или обычные присваивать [дубликат]

Это проблема с цитатой, вам нужно:

projectID=$(
  cat file.json | jq -r ".resource[] | select(.username=='$EMAILID') | .id"
)

Если вы поместите одинарные кавычки , чтобы разграничить основную строку, оболочка принимает $EMAILID буквально.

«Двойная кавычка» каждого литерала, содержащего пробелы / метасимволы, и разворота каждого : "$var", "$(command "$var")", "${array[@]}", "a & b". Используйте 'single quotes' для кода или литерала $'s: 'Costs $5 US', ssh host 'echo "$HOSTNAME"'. См. http://mywiki.wooledge.org/Quotes http://mywiki.wooledge.org/Arguments http: //wiki.bash-hackers. org / syntax / words

2
задан Mirza Dobric 23 January 2013 в 19:55
поделиться

5 ответов

Все зависит от того, что делает геттер. Если это простой getter (получение члена данных), тогда JVM сможет встроить его «на лету», если он определит, что этот код является «горячей точкой» для производительности. На самом деле, почему JVM Oracle / Sun называется «HotSpot». :-) Он будет применять агрессивную оптимизацию JIT, где он видит, что ему это нужно (когда это возможно). Если геттер делает что-то сложное, то, естественно, может быть медленнее использовать его и повторить эту работу.

Если код не является «горячей точкой», конечно, вам все равно, разница в производительности.

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

10
ответ дан T.J. Crowder 31 August 2018 в 22:15
поделиться

Я предпочитаю второй блок кода, потому что он присваивает foo, а затем foo не может изменить на null / notnull.

Часто требуется нуль, и Java должен решить эту проблему с помощью оператора Elvis:

if (someObject.getFoo()?.equals(someOtherString)) {
  return;
}
0
ответ дан Austin Powers 31 August 2018 в 22:15
поделиться

Оба они выглядят одинаково, даже Performance wise. Используйте 1-й блок, если вы уверены, что больше не будете использовать возвращаемое значение, если нет, используйте второй блок.

0
ответ дан joey rohan 31 August 2018 в 22:15
поделиться

Вы можете опустить первую нулевую проверку, так как equals делает это для вас:

Результат является истинным тогда и только тогда, когда аргумент не является нулевым и является объектом String, который представляет одну и ту же последовательность символов как этот объект.

Итак, лучшее решение просто:

if(someOtherString.equals(someObject.getFoo())
1
ответ дан masgo 31 August 2018 в 22:15
поделиться

Использовать второй блок. Первый блок, скорее всего, будет оптимизирован ко второму, а второй - более читабельным. Но главная причина заключается в том, что если someObject когда-либо обращается к другим потокам, и если оптимизация каким-то образом отключается, первый блок не будет исключать исключения исключений NullPointerException.

Также: даже без многопоточности, если someObject случайно сделана volatile , оптимизация исчезнет. (Плохо для производительности и, конечно же, очень плохо с несколькими потоками). И, наконец, второй блок будет проще использовать отладчик (не то, что , что когда-либо понадобится.)

3
ответ дан RalphChapin 31 August 2018 в 22:15
поделиться
Другие вопросы по тегам:

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