Есть ли способ использовать несколько попыток и один улов?

У меня есть следующий код с несколькими попытками... поймать, есть ли способ сделать его проще?

try {
    saveToInternalStorage(((BitmapDrawable) image1.getDrawable()).getBitmap(), imageFilename + "_1");
} catch (Exception e) {
    e.printStackTrace();
}
try {
    saveToInternalStorage(((BitmapDrawable) image2.getDrawable()).getBitmap(), imageFilename + "_2");
} catch (Exception e) {
    e.printStackTrace();
}
try {
    saveToInternalStorage(((BitmapDrawable) image3.getDrawable()).getBitmap(), imageFilename + "_3");
} catch (Exception e) {
    e.printStackTrace();
}
try {
    saveToInternalStorage(((BitmapDrawable) image4.getDrawable()).getBitmap(), imageFilename + "_4");
} catch (Exception e) {
    e.printStackTrace();
}

Цикл for может быть лучше для вас!

AIMIN PAN 10.04.2019 04:43

Код кажется странным. Если первое «saveToInternalStorage» не удается, это считается достаточно необычным, чтобы распечатать трассировку стека. Но затем мы продолжаем и вызываем «saveToInternalStorage» для второго изображения. Трудно поверить, что программа делает что-то полезное, фактически игнорируя ошибки. Одна попытка/поймать имеет более очевидную семантику: сдаться при первой неудаче.

user10762593 10.04.2019 04:50

Вы почти никогда не должны catch Exception; вместо этого поймайте более значимый класс (IOException), который вы понимаете.

chrylis -cautiouslyoptimistic- 10.04.2019 05:56
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
3
66
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Да... Однако опасения, высказанные в комментариях, справедливы.

  1. Зачем вам это нужно
  2. Почему вы рады, что это не удалось
  3. Почему вы игнорируете ошибки?
  4. Если бы 1 потерпел неудачу, было бы хорошо, если бы они все потерпели неудачу

Все это в сторону. вот разбрызгивание кода

var array = new[]{ image1, image2, image3, image4 };

for (var i = 0; i < array.Length; i++)
{
   try
   {
      saveToInternalStorage(array[i].getDrawable().getBitmap(), $"{imageFilename}_{i + 1}");
   }
   catch (Exception e)
   {
      e.printStackTrace();
   }
}

Я получаю эти изображения с 4 разных кнопок изображения, поэтому я не могу использовать «для», и мне все равно, было ли одно или несколько пустыми.

Danial 10.04.2019 17:02
Ответ принят как подходящий

Если то, что вы написали, действительно соответствует логике, то:

private void trySave(Whatever image. String file) {
   try {
       saveToInternalStorage(image.getDrawable().getBitmap(), file);
   } 
   catch (Exception exc) {
        exc.printStackTrace();
   }
}

и позвони как

trySave(image1, imageFilename+"_1)";
trySave(image2, imageFilename+"_2");
trySave(image3, imageFilename+"_3");
trySave(image4, imageFilename+"_4");

Подпрограммы уменьшают количество повторений.

если вы хотите удалить множественный перехват попытки, вы можете просто поместить блок перехвата попытки в saveToInternalStorage, а затем, если вас не волнует ошибка, просто используйте finally вместо перехвата. его быстрее не поймать, так как он не отслеживает возникшую ошибку.

// example 1  if you are not interested in the error or the success responce

void saveToInternalStorage(BitmapDrawable bd, String file_name)
{
    try{

    //..put your code here

    }finally{


    }

}
// example 2 if you are interested in just geting the success response  

 boolean saveToInternalStorage(BitmapDrawable bd, String file_name)
{
    try{

 //..put your code here

 return true;
    }finally{
     return false;
    }

}
// example 3 if you are don't want to touch your saveToInternalStorage function 

 boolean saveToInternalStorage(BitmapDrawable bd, String file_name)
{
    try{
    saveToInternalStorage(bd,file_name)

return true;
    }finally{

 return false;

}

}

Другие вопросы по теме