Другое событие NullPointerException
возникает, когда объявляется массив объектов, а затем сразу же пытается разыменовать его внутри.
String[] phrases = new String[10];
String keyPhrase = "Bird";
for(String phrase : phrases) {
System.out.println(phrase.equals(keyPhrase));
}
Этот конкретный NPE можно избежать, если порядок сравнения отменяется ; а именно, использовать .equals
для гарантированного непустого объекта.
Все элементы внутри массива инициализируются их общим начальным значением ; для любого типа массива объектов, это означает, что все элементы null
.
Вы должны инициализировать элементы в массиве перед доступом или разыменованием их.
String[] phrases = new String[] {"The bird", "A bird", "My bird", "Bird"};
String keyPhrase = "Bird";
for(String phrase : phrases) {
System.out.println(phrase.equals(keyPhrase));
}
Я использовал Ironspeed экстенсивно в течение прошлых двух лет для большинства наших форм ASP.NET по проектам данных.
Работает. Делает несколько вещей хорошо: сохраненный procs, быстрое расположение обзора таблицы и экранов CRUD, быстрое расположение единственных рекордных экранов CRUD. Это справляется с распространением в прямом и обратном направлениях (или полукруглое прохождение) процесс прилично, обнаруживая изменения в Вашей схеме дб бэкэнда и обновляя ее уровень доступа к данным, затем делая измененные столбцы доступными, чтобы Вы изменили свой UI (в панелях рекордного или табличного элемента управления). ISD (как они называют его) делает превосходное задание в создании управления безопасностью для Вашего довольно безболезненного приложения, даже вниз к уровню управления (при использовании разделенных на подклассы версий ISD средств управления asp.net). Финал плюс, не маленький, является основанным на CSS управлением темой (легкий измениться на множество тем, легких настроить конкретную тему и даже слишком плохо создать Ваш собственный вариант темы путем разветвления существующего, который Вы любите). В зависимости от того, позволяете ли Вы ISD создать Ваш сохраненный procs в кодовой базе, или база данных, изменяя DB во время выполнения может быть куском пирога.
Довольно активный форум с основной группой услужливых участников. Можно, вероятно, избежать заплаченной технической поддержки через форум.
Хорошо, вниз стороны. Создает довольно большое скопление кода, будучи тремя разделенной на уровни архитектурой. Как Galwegian говорит, как любая платформа, у Вас есть бархатные наручники (вытащите свой ум из поля, если Вы думаете о чем-нибудь кроме ограничений кода и конвенций!). Бархатные наручники являются страницей и моделью управления, слоем данных, отсутствием бизнес-объекта / возможность класса по сути, модель обратной передачи и искушение сделать Вашего пользователя, GUI похож на ИХ пользователя GUI, который выходит из поля, потому что это так чинят легкое и удобное.
ISD создает основную страницу путем объединения шаблона HTML (в, в который Вы помещаете определенные теги генерации кода ISD и любые другие теги, и т.д., Вы который с помощью GUI ISD или вручную). Модель страницы полагается на код позади страницы, созданной из части шаблона кода. Базовые классы являются почти абсолютно переопределяемыми, так, чтобы можно было переопределить все функции по умолчанию, повторно создать приложение и не потерять переопределения. Средства управления базой данных живут в контейнере страницы, но имеют свои собственные определения классов (т.е. свой код - позади) в определенных/app_code файлах. Снова, каждый тип управления имеет свой собственный базовый класс с довольно абсолютно переопределяемыми методами. Единственное рекордное управление (показывая единственную запись дб) довольно просто. Таблица, показывая несколько записей, имеет класс таблицы и класс строки таблицы. Веб-сайт ISD (www.ironspeed.com/support) имеет хорошую документацию модели ISD в целом.
Так, где проблемы в этой модели? 1. Легкий и заманчивый для проживания с их из поля GUI. Укажите на ISD на свою базу данных, выберите таблицы, Вы хотите иметь его, заходят к страницам, говорят этому виды страниц, дают ему тематический стиль, и пять минут спустя Вы просматриваете приложение.Круто. Но, очень легко забыть, что их пользователь, GUI, вероятно, не, что Ваш пользователь хочет видеть. Так, быть готовым думать для себя и переделать GUI, таким образом созданный. Не трудно, чтобы сделать, и можно использовать VS 2005 для помощи Вам.
Если Вы будете умны, то Вы запишете это, после того как хранят его в app_code где-нибудь и используют его путем вызова его от переопределенного метода в таблице или записывают средства управления. Если Вы будете похожи на большинство из нас, то Вы будете первые спагетти это в к одному из классов с фоновым кодом выше, и затем забывать, что Вы сделали так или имеете копию на каждой из 10 страниц, которая управляет данными о клиентах. В моем мире, который обычно означал 5 идентичных функций и 5, которые все отличаются (даже при том, что они, как все предполагается, являются тем же). ISD делает его заставляющий заказывать marinara, потому что модель предоставляет себя запутанному коду. Конечно, можно полностью предотвратить это, но необходимо изучить модель ISD для определения лучшего способа сделать это на проекте.
Снова, знание является ключом. Можно зафиксировать это, но необходимо знать, что Вы ДОЛЖНЫ.
В целом: Попробуйте демоверсию. Укажите на него на что-то простое, которое Вы действительно хотите возвратить к приложению asp.net. Создайте, возможно, три таблицы. Затем разделите его с помощью вышеупомянутого в качестве руководства. Посмотрите то, что ВЫ думаете и отправляете назад на этот вопрос.
Если поколение хранимой процедуры - все, что Вы после, CodeSmith является достойным выбором в доле расходов IronSpeed. Существует несколько доступных шаблонов sproc, и можно создать собственное или настроить существующее если, в именно это Вы нуждаетесь. Вы можете также генерал код .NET к Вашему содержанию основ с CodeSmith. Тонны шаблонов бизнес-класса уже существуют для этого.
Значение IronSpeed не находится в sproc поколении, а в функциях RAD. Я соглашаюсь с @Galwegian... IronSpeed хорошо для ложных взлетов или очень простых приложений, не настолько хороших вообще, если необходимо сделать какую-либо настройку.
Можно хотеть проверить платформу CRUD Evolutility. Это обеспечивает некоторые из тех же функций (ограниченный CRUD) и является открытым исходным кодом.
Я использовал его для удобства для очень маленького проекта. Это сделало то, что я хотел и сохранил меня работа нескольких дней.
Основная проблема, которую я нашел, состояла в том, когда она пришла к настройке или расширению сгенерированного проекта. Необходимо провести довольно мало времени, пытаясь понять способ Ironspeed сделать вещи, который, я признаю, не является моим путем.
Я использовал бы его снова для маленького проекта, если бы я знал заранее, что я не должен был бы настраивать его очень после.