Почему мы не можем использовать утверждение для публичных методы?

Это может помочь Вам:

http://www.marcworrell.com/article-2990-en.html

Это - php, так должно быть довольно простым для установки на dev сервере.

я попробовал этого однажды:

http://term.ie/oauth/example/

Это довольно просто. У Вас есть ссылка для загрузки кода внизу.

23
задан wattostudios 30 April 2012 в 14:22
поделиться

4 ответа

Как я понимаю, предложение, которое вы цитировали, бессмысленно,

Конечно, assert не для проверки параметров.

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

Затем произойдет одно из следующего:

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

3
ответ дан 29 November 2019 в 01:32
поделиться

Это, вероятно, оригинальный источник из руководства по Java SE «Программирование с утверждениями».

Не используйте утверждения для проверки параметров открытого метода. Утверждение неуместно, потому что метод гарантирует, что он всегда будет принудительно проверять аргументы. Он должен проверить свои аргументы, включены ли утверждения. Кроме того, конструкция assert не выдает исключение указанного типа. Может выдать только ошибку AssertionError.

Это не запрещает утверждения в публичных методах. Он запрещает их только для проверки аргументов публичного метода.

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

Более подробную информацию о том, когда использовать утверждения, можно найти здесь .

2
ответ дан 29 November 2019 в 01:32
поделиться

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

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

public void update(Object o) {
   int nUpdatedObjects = dao.update(o);
   assert(nUpdatedObjects == 1)
}

В этом случае она служит для validate слоя dao с использованием принципа сбоя быстрого .

1
ответ дан 29 November 2019 в 01:32
поделиться

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

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

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

0
ответ дан 29 November 2019 в 01:32
поделиться
Другие вопросы по тегам:

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