Проверка аргументов или разработка по контракту в Java (GWT). Когда начать? - PullRequest
1 голос
/ 15 мая 2009

Я играю в GWT. Я ищу базовую проверку аргументов. Я не требую инвариантов или результата гарантирую. Что меня интересует, так это лучшие практики по теме.

Например, в c # я использую одну из следующих опций:

  1. if (arg1 != null) throw new ArgumentNulException....; // Official for public API;
  2. Args.NotNull(arg1); // Home grown.
  3. Contracts.Requires(arg1 != null); // Internal contract validation.

Какое самое лучшее место для меня?

Хорошо, что я нашел сейчас.

  1. Проверка аргументов метода
  2. Программирование с утверждениями

Ответы [ 3 ]

2 голосов
/ 15 мая 2009

Обычно я делаю это сам, в соответствии с рекомендациями Джоша Блоха Effective Java , поэтому:

if (arg == null) throw new NullPointerException("arg cannot be null");

или

if (arg < 0) throw new IllegalArgumentException("arg must be positive");

Я бы настоятельно рекомендовал получить копию Effective Java , если у вас ее еще нет.

0 голосов
/ 20 сентября 2009

Если вы просто ищете проверку аргументов, лучшим решением будет простая проверка с исключением.

Исключение предоставляет вам лучшее решение для обработки обработки, чем простые утверждения.

В этом сценарии решения по контракту окончательно излишни.

0 голосов
/ 15 мая 2009

Согласно странице Википедии Проекта по контракту , популярными инструментами для этой методологии с Java являются:

iContract2, Contract4J, jContractor, Jcontract, C4J, CodePro Analytix, STclass, препроцессор Jass, OVal с AspectJ, язык моделирования Java (JML), SpringContracts для платформы Spring или Modern Jass, Custos с использованием AspectJ, JavaDbC с использованием AspectJ, JavaTESK с использованием расширения Java.

Чтение одного из них, вероятно, хорошая идея.

У меня нет личного опыта ни с одним из них, но Прагматичный Программист говорит хорошие вещи об оригинальном iContract, так что это может быть хорошим началом.

Вы всегда можете попробовать сделать это самостоятельно, используя встроенные утверждения Javas:

assert Expression1;
или
assert Expression1 : Expression2 ;

Где Expression1 приводит к логическому значению, а Expression2 - значение, которое вы тестируете (необязательно). Попробуйте.

...