У меня много разных операторов if-else. Для оптимизации кода мне нужно написать одну функцию для всей логики if else. На данный момент моя структура кода приведена ниже.
входной запрос находится в JSONObject (org.json.simple.JSONObject), который имеет более 10 значений.
String s = (String) inputObj.get("test");
String s1 = (String) inputObj.get("test");
String s2 = (String) inputObj.get("test");
String s3 = (String) inputObj.get("test");
if (s != null && s.trim().isEmpty()) {
if (s1 != null && s1.trim().isEmpty()) {
if (s2 != null && s2.trim().isEmpty()) {
if (s3 != null && s3.trim().isEmpty()) {
if (s4 != null && s4.trim().isEmpty()) {
........
} else {
return;
}
} else {
return;
}
} else {
return;
}
} else {
return;
}
} else {
return;
}
Как избежать такого зацикливания и выдачи сообщения об ошибке обычным методом.
Заранее спасибо.
В javax.validation для каждого запроса я хочу создать bean-компонент и проверить его, верно? чтобы избежать этого, я получаю запрос как JSONObject.
Вы можете объединить их все в одно if / else с помощью &&.




Подумайте о добавлении всех ваших строк в массив или ArrayList строки и прохождение каждой записи в нем и проверьте их на нуль или пустоту.
вы можете объяснить на каком-нибудь примере?
что мне очень помогает.
Пример @Emre Acar - это то, что вам нужно
Вы можете попробовать это.
void main() {
List<String> sList = new ArrayList<>();
sList.add(inputObj.get("test"));
sList.add(inputObj.get("test"));
sList.add(inputObj.get("test"));
sList.add(inputObj.get("test"));
for(String s : sList){
try {
checkString(s);
}catch (Exception e){
//log or print the exception, however you like
}
}
}
void checkString(String s) throws Exception{
if (s!= null && !s.trim().isEmpty()){
//doStuff
}else{
throw new Exception("String is null or empty !!!");
}
}
Вы также должны проверить это.
Как я могу выбросить исключение, если имя не указано или пусто?
@MegalaPerumal, кажется, я не понял, что вам нужно. Вы можете просто использовать throw new Exception ()
да, в JSONObject я получу весь ввод, мне нужно его проверить, и я хочу выбросить исключение для каждого поля. если у меня есть имя, то я считаю, что фамилия пуста. Хочу скинуть фамилию пустую. но в вашем коде я не могу выбросить исключение для всех отдельных полей
отлично. Но я хочу выбросить, какая строка пуста. например Имя пусто, фамилия пуста, адрес электронной почты пуст. Как я могу сделать это в приведенном выше коде.
@MegalaPerumal, я не собираюсь делать за тебя все домашние задания. Постарайтесь добиться прогресса самостоятельно.
Я согласен. Я не знаю, как вернуть индивидуальную проверку. по этой причине только я разместил вопрос.
public Integer checkIsEmapty(String checkingString){
if (checkingString != null && !checkingString.trim().isEmpty()){
return 1;
}
return 0;
}
public String method(){
String s = "";
String s1 = "hi";
String s2 = "java";
String s3 = null;
String s4 = null;
Integer s1i = checkIsEmapty(s);
Integer s2i = checkIsEmapty(s1);
Integer s3i = checkIsEmapty(s2);
Integer s4i = checkIsEmapty(s3);
Integer s5i = checkIsEmapty(s4);
Integer total = s1i + s2i + s3i + s4i + s5i;
switch (total){
case 1 :
// To DO
case 2 :
// To DO
}
}
in switch used to checking the value, U can pass binary and Integer also
Как упоминал @Emre Acre,
List<String> sList = new ArrayList<>();
sList.add(inputObj.get("test"));
sList.add(inputObj.get("test"));
sList.add(inputObj.get("test"));
sList.add(inputObj.get("test"));
boolean allDataValid = sList
.stream()
.allMatch(s -> s != null && s.trim().isEmpty());
if (allDataValid) {
......
} else {
return;
}
так же я хочу проверить все переменные?
Это не Акко -_-
public class YourClass{
private boolean isBlankDataPresent(JSONObject inputObj, String[] keys) throws Exception {
for (String key : keys) {
String input = (String) inputObj.get(key);
if ( input == null || input.trim().isEmpty())
throw new Exception(key +" is Empty");
}
return false;
}
public boolean validateData(JSONObject inputObj, String[] keys) throws Exception {
boolean isBlankDataPresent= isBlankDataPresent(inputObj, keys);
if (!isBlankDataPresent) {
// do Your Stuff and return true
}
}
}
В этом случае я хочу добавить новый validateData () для всех полученных мной запросов?
Если вам нужен общий метод, вы можете передать список ключей также методу validateData () и соответствующим образом проверить
Вы изучали структуру проверки Java, такую как javax.validation?