2013-04-03 15 views
5

Aby zrobić wewnętrznych kontroli logiczne istnieją dwa sposoby Jawaróżnicy pomiędzy stosowaniem dochodzić i rzuca wyjątek AssetionError w Java

  1. wykorzystują kluczowe wymuszenia: na przykład, dochodzić (x> y);
  2. Błąd ręcznego wrzucania asercji: np. jeśli (y> x) wyrzuć nowy AssertionError();

Jakie są różnice między wyżej dwóch metod (wydajność mądry, elastyczność programowania, itp? Który z nich jest uważana za dobrą praktykę programowania?

+2

Przy okazji: nie musisz używać nawiasów podczas robienia twierdzeń. Więc: możesz po prostu napisać 'assert x> y' zamiast' assert (x> y) '. – m4tx

Odpowiedz

9

Główną różnicą jest to, że assert nie jest gwarantowane być przetwarzane, chyba że twierdzenia są wyraźnie włączone (albo poprzez opcję -EA do java, lub programowo) z drugiej strony, rzucanie new AssertionError() zawsze będzie działać

Niektóre informacje czytania.. Programming with Assertions

0

Gdy assert (x> y) nie powiedzie się, podniesie to AssertionError (pod warunkiem, że są zapewnione potwierdzenia). Zaletą używania asercji Java jest to, że można je włączyć lub wyłączyć podczas kompilacji. Można wyłączyć asercje dla środowiska produkcyjnego, które zwiększają wydajność w porównaniu do ręcznego podnoszenia AssertionError, w którym zawsze wykonywane są asercje, zmniejszając w ten sposób wydajność.

1

Sposób nr 1 "assert (x> y);" używa funkcji JVM, która jest domyślnie wyłączona . Zapewnia jednak większą elastyczność, ponieważ można go włączać i wyłączać w dowolny sposób za pomocą jednego parametru.

Way # 2 "jeśli (y> x) wyrzuć nowy AssertionError();" będzie zawsze wykonywane, nie można go wyłączyć za pomocą assert-param. To tylko wyjątek.

Często widziałem, że ludzie używają wyjątków dla "prawdziwych" błędów (sieć nie jest dostępna, błędne dane wejściowe są dostarczane), podczas gdy asercje są często używane (tj. Włączane) podczas programowania/integracji dla bardzo podstawowych kontroli (np. Param nie null). IMO, trudno jest narysować linię.

0

Brak powyższych odpowiedzi jest odpowiedzią na moje drugie pytanie (które z nich uważa się za dobrą praktykę programowania?). Więc rozmawiałem o tym z jednym z moich przyjaciół i według niego, jeśli coś jest prywatne do pakietu i jesteś jedyną osobą wywołującą tę funkcję (np. Prywatne funkcje), to użyj asemblacji. Jeśli coś jest publiczne i spodziewamy się, że inny programista będący stroną trzecią może bezpośrednio wywołać funkcję, wykonaj wyraźne zaznaczenie i wyrzuć wyjątek.

Powiązane problemy