Поддерживает ли Android короткое замыкание? - PullRequest
2 голосов
/ 28 февраля 2012

Это кажется глупым вопросом, поскольку Java делает короткое замыкание, но я вспомнил, как Android не совсем использует Java в том же смысле, в каком я предполагаю, так сказать, в этом фрагменте кода я написал:

... code omitted ...
else if (mimeType.equals("application/x-tar")
     || mimeType.equals("application/x-rar-compressed")
     || mimeType.equals("application/stuffit")
     || mimeType.equals("application/zip")
     || mimeType.equals("application/x-gzip"))

... было бы лучше для меня поставить более общие вещи (zip / rar) перед менее распространенными вещами (tarballs / gzip)?

Тот факт, что я не смог найти аналогичный вопрос по SO, вероятно, дает мне ответ на этот вопрос, но лучше, чем потом сожалеть.

Ответы [ 2 ]

5 голосов
/ 28 февраля 2012

Короткое замыкание поддерживается с ||.

Если вы пытаетесь оптимизировать этот случай, вы должны попробовать поместить каждое значение в статический Set, а затем проверить, является ли typeSet.contains(mimeType).

2 голосов
/ 28 февраля 2012

Да, оператор || (условный или) является оператором короткого замыкания.Процитируем Спецификацию языка Java :

Оператор || похож на | ( §15.22.2 ), но оценивает его право-ручной операнд, только если значение его левого операнда равно false.Он синтаксически левоассоциативен (он группируется слева направо).Это полностью ассоциативно в отношении как побочных эффектов, так и значения результата;то есть для любых выражений a, b и c вычисление выражения ((a) || (b)) || (c) дает тот же результат, причем те же побочные эффекты возникают в том же порядке, что и при оценкевыражения (a) || ((b) || (c)).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...