Проверка платформы объекта

Исключение нулевого указателя генерируется, когда приложение пытается использовать null в случае, когда требуется объект. К ним относятся:

  1. Вызов метода экземпляра объекта null.
  2. Доступ или изменение поля объекта null.
  3. Принимая длину null, как если бы это был массив.
  4. Доступ или изменение слотов null, как если бы это был массив.
  5. Бросок null как будто это было значение Throwable.

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

Ссылка: http://docs.oracle.com/javase/8/docs/api/java/lang/NullPointerException.html

16
задан StuartLC 4 September 2012 в 04:18
поделиться

4 ответа

Я на самом деле не использовал платформу Объекта прежде, но быстрый поиск указывает, что у Вас есть несколько опций.

1) всегда Проверяют на другом слое в Вашем приложении

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

2) Рычаг в события OnChanged Объекта затем выполняет проверку

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

3) Реализация частичные методы для проверки изменений свойства

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

я надеюсь, что это помогает. Удача.

11
ответ дан 30 November 2019 в 22:10
поделиться

Если Вы используете ASP.NET MVC, то Вы могли использовать Блок приложений Проверки или Систему. ComponentModel. DataAnnotations. Статьи Используя Аннотирования данных и Используя шоу Блока приложений , как сделать их использование Linq, но использование с платформой объекта должно быть подобным.

3
ответ дан 30 November 2019 в 22:10
поделиться

Вот простой код, который работает на любом классе, а не только на базе.

    public static void DuckCopyShallow(this Object dst, object src)
    {
        var srcT = src.GetType();
        var dstT= dst.GetType();
        foreach(var f in srcT.GetFields())
        {
            var dstF = dstT.GetField(f.Name);
            if (dstF == null)
                continue;
            dstF.SetValue(dst, f.GetValue(src));
        }

        foreach (var f in srcT.GetProperties())
        {
            var dstF = dstT.GetProperty(f.Name);
            if (dstF == null)
                continue;

            dstF.SetValue(dst, f.GetValue(src, null), null);
        }
    }
-121--3448153-

Как Бруно сказал, это о неизменяемости. Речь идет не только о последовательностях, но и о любых обертках, например Double, Integer, Character и т.д. Для этого существует множество причин:

  • Безопасность потоков
  • Безопасность
  • Куча, управляемая самой Java (в отличие от обычной кучи, которая является Garbage Collected в разных способах)
  • Управление памятью

В основном это так, что вы, как программист, можете быть уверены, что ваш ряд никогда не будет изменен. Это также, если вы знаете, как это работает, может улучшить управление памятью. Попробуйте создать два идентичные ряды одна за другой, например «hello». При отладке вы заметите, что у них одинаковые идентификаторы, что означает, что они являются точно такими ЖЕ объектами. Это связано с тем, что Java пусть вы это сделаете. Это было бы невозможно, если бы последовательности были мутабельными. Они могут иметь то же, что и я, и т.д., потому что они никогда не изменятся. Итак, если вы когда-нибудь решите создать 1 000 000 последовательности «hello,» то вы действительно сделаете это создадите 1 000 000 указателей на «hello.» Кроме того, назначение любой функции в последовательности или любой обертки по этой причине приведет к созданию другого объекта (снова посмотрите на идентификатор объекта - он изменится).

Дополнительный финал в Java не обязательно означает, что объект не может изменяться (он отличается, например, от C++). Это означает, что адрес, на который он указывает, не может быть изменен, но можно изменить его свойства и/или атрибуты. Поэтому понимание разницы между неизменностью и окончательностью в некоторых случаях может быть действительно важным.

HTH

Ссылки:

-121--3474501-

В .NET 4 будет реализована стандартная поддержка проверки в Entity-Framework.

Проверьте: http://blogs.msdn.com/adonet/archive/2010/01/13/introducing-the-portable-extensible-metadata.aspx

Поэтому не работайте над реализацией слишком сложной логики проверки...

6
ответ дан 30 November 2019 в 22:10
поделиться

Если вы используете WPF или Windows Forms, вы можете реализовать интерфейс IDataErrorInfo .

Пример приложения BookLibrary проекта WPF Application Framework (WAF) показывает, как можно проверить сущности, созданные Entity Framework.

0
ответ дан 30 November 2019 в 22:10
поделиться
Другие вопросы по тегам:

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