вы можете сделать это с помощью php и css.
php-путь - это использование выражения if else , как показано ниже
if(isset( вы можете сделать это с помощью php и css.
php-путь - это использование выражения if else , как показано ниже
[110]POST['submit'])){
$name = вы можете сделать это с помощью php и css.
php-путь - это использование выражения if else , как показано ниже
[110]POST['first_name'];
$email = вы можете сделать это с помощью php и css.
php-путь - это использование выражения if else , как показано ниже
[110]POST['email_address'];
$subject = вы можете сделать это с помощью php и css.
php-путь - это использование выражения if else , как показано ниже
[110]POST['subject'];
$message = вы можете сделать это с помощью php и css.
php-путь - это использование выражения if else , как показано ниже
[110]POST['message'];
$mailTo = "jamie@sharpsdigital.co.uk";
$headers = "From: MLS systems Contact Form ";
$txt = "$name has sent you an email from the address. " .$email. "\n\n With the message of.\n\n" .$message. " \n\n This is an automated response from the contact form, Please click on the blue email address above to respond." ;
if(mail ($mailTo, $subject, $txt, $headers)){
echo "Thanks for your contact.";
}
}else{ ?>
your form goes here
<?php }?>
Поскольку можно вызвать исключение нулевого указателя, даже не задействуя переменную:
throw new NullPointerException();
Я бы сказал, что нет универсального способа закрепить исключение нулевого указателя на конкретную переменную.
Лучше всего поместить как можно меньше операторов в каждую строку, чтобы стало очевидно, что вызвало исключение нулевого указателя. Рассмотрите возможность рефакторинга вашего кода в вопросе, чтобы он выглядел примерно так:
List items = this.superSL.items;
String name = items.get(name);
String source = name.getSource();
if (source.compareTo(VIsualShoppingList.Source_EXTRA) == 0) {
// ...
}
Конечно, нужно больше строк кода. Но он также более читабелен и удобен в обслуживании.
Вы могли бы рассмотреть, как [1 110] объявленный здесь , JDK 14, который должен включать JEP 358:
JEP 358: Полезный NullPointerExceptions
предположим NPE происходит в этом коде:
a.b.c.i = 99;
имя файла и номер строки не точно определяют точно, какая переменная была пустой.
Было этоa
илиb
илиc
?А подобная проблема происходит при доступе к массиву и присвоении. Предположим, что NPE происходит в этом коде:
a[i][j][k] = 99;
имя файла и номер строки не точно определяют точно, какой компонент массива был пустым.
Было этоa
илиa[i]
илиa[i][j]
?Описание:
, Если бы более сложный оператор
a.b.c.i = 99;
бросает NPE, сообщение разделило бы оператор и точно определило бы причину путем показа пути полного доступа, который привел к пустому указателю:
Exception in thread "main" java.lang.NullPointerException:
Cannot read field "c" because "a.b" is null
at Prog.main(Prog.java:5)
Снова: быть протестированным с JDK 14.
К сожалению, нет простого программного способа определить, какая переменная или вызов метода является источником исключения. Вы можете использовать что-то вроде Аспектно-ориентированное программирование (AOP) , например AspectJ , но это не является неотъемлемой частью языка и обычно не включается в программу просто для целей отладки.
if (var == null) -> слишком много работы
попробуйте {} catch () {}
Отладчик
Я знаю, что вы не хотите этого слышать, но это просто цена ведения бизнеса.
if (this.superSL.items.get(name).getSource().compareTo(VIsualShoppingList.Source_EXTRA)==0) {
Необычно видеть так много связанных вместе вызовов методов. Я считаю, что вам лучше всего выработать привычку разбивать их больше - не обязательно, до одного звонка на линию, но меньше, чем это. Почему?
1) Корректность
- допустимо ли в проекте, чтобы один из этих вызовов возвращал нуль? Если это так, вам следует разобрать его, протестировать и обработать соответствующим образом.
2) Понятность
- будущим сопровождающим (включая future you ) будет легче понять, если вы промежуточные, хорошо названные переменные, чтобы помочь прояснить, что происходит в этой строке. .
3) Эффективность
- обычно, когда вы так глубоко погружаетесь в граф (объединяете вместе серию вызовов методов), вероятно, вам придется вернуться к нему позже. Захват этого промежуточного значения в промежуточной переменной означает отказ от повторного вызова одного или нескольких методов.
4) Отладка
- как указано в вашем вопросе, разделение сложной строки, подобной этой, упрощает отладку. путем сужения возможного источника исключения.
Думаю, вам стоит обратить внимание на Закон Деметера .
Не многие люди строго следуют ему, потому что это приводит к множеству методов делегирования.
Но слишком далеко от этого приведет к зависимостям от внутренних структур, которые должны быть прозрачными.
Я знаю, что вы предположили, что (var == null)
- это слишком много работы, но, как Мигель заявил в комментариях, что это то, с чем я бы пошел.
Что вы имеете в виду, говоря «использовать отладчик -> вручную, слишком медленно»? Если ваш код правильно структурирован, то в одной строке будет использоваться не более двух или трех переменных. Неужели так медленно их проверять? У вас не каждую минуту NullPointers.