Pereiti prie turinio

Custom exceptions, Java


Rekomenduojami pranešimai

Skaitinejau internete apie custom exceptions, bet nesuprantu/nematau prasmes vieno dalyko

class NumberRangeException extends Exception
{
   String msg;

   NumberRangeException()
   {
       msg = new String("Enter a number between 20 and 100");
   }
}

public class My_Exception
{
   public static void main (String args [ ])
   {
       try
       {
           int x = 10;

           if (x < 20 || x >100) throw new NumberRangeException( ); 
       } 
       catch (NumberRangeException e)
       {
           System.out.println (e);
       }
   }
}

Kokia prasme is to exception jei reik paciam tikrint ar (siuo atveju) skaicius yra tarp 20 ir 100, o tas exceptionas tiesiog grazina klaidos pranesima - tam juk uztektu paprasto if

 

Ar imanoma kaip nors padaryt jog programa pati tikrintu. Siuo atveju jei priskiriam x = 10 ir tokiu atveju iskart "catch'ina" exceptiona? (t.y. kaip su standartiniais java exceptions)

public class My_Exception
{
   public static void main (String args [ ])
   {
       try
       {
           int x = 10; 
       } 
       catch (NumberRangeException e)
       {
           System.out.println (e);
       }
   }
}

Na tikiuosi supratot ka norejau pasakyt :P

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Aišku supratom. Neteisingas požiūris į Exceptions.

Tu gali padaryt taip:

public class MyClass {

   public static void main (String args [ ]) {

       try {
           int x = 10;

           if (x < 20 || x >100) throw new NumberRangeException( ); 

           if (/*not valid*/) throw new MyException2('msg');

           if (/*not valid*/) throw new MyException3('msg');

       } catch (NumberRangeException e) {
           /*do somthing*/
       } catch (MyException2 e) {
           /*do somthing*/
       } catch (MyException3 e) {
           /*do somthing*/
       }
   }
}

 

arba be Exceptions:

public class MyClass {

   public static void main (String args [ ]) {

       int x = 10;

       if (x < 20 || x >100) {
           /*do something*/
           return;
       }

       if (/*not valid*/) {
           /*do something*/
           return;
       }

       if (/*not valid*/) {
           /*do something*/
           return;
       }

       /*passed. do something*/
   }
}

 

Ar ne kvailai atrodo? Tiek pirmas tiek antras variantai kvailoki. Turėtų būti panašiai taip:

 

public class MyValidator {

   public static void checkRange(int x) {

       if (x < 20 || x >100) 
           throw new NumberRangeException( ); 
   }

   public static void checkSmth2(int x) {

       if (/*not valid*/) 
           throw new MyException2('msg'); 
   }

   public static void checkSmth3(int x) {

       if (/*not valid*/) 
           throw new MyException3('msg'); 
   }
}

public class MyActionClass {

   public static int getTriple(int x) {

       MyValidator.checkRange(x);
       MyValidator.checkSmth2(x);
       MyValidator.checkSmth3(x);

       return 3 * x;
   }
}

public class MyClass {

   public static void main (String args [ ]) {

       try {
           int x = 10;


           MyActionClass.getTriple(x);

       } catch (NumberRangeException e) {
           /*do somthing*/
       } catch (MyException2 e) {
           /*do somthing*/
       } catch (MyException3 e) {
           /*do somthing*/
       }
   }
}

 

Nieko konkretaus neparašiau. Tik naujų minčių apmąstymui :)

Rašyk kas neaišku, uždarbiečiai padės.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prisijunkite prie diskusijos

Jūs galite rašyti dabar, o registruotis vėliau. Jeigu turite paskyrą, prisijunkite dabar, kad rašytumėte iš savo paskyros.

Svečias
Parašykite atsakymą...

×   Įdėta kaip raiškusis tekstas.   Atkurti formatavimą

  Only 75 emoji are allowed.

×   Nuorodos turinys įdėtas automatiškai.   Rodyti kaip įprastą nuorodą

×   Jūsų anksčiau įrašytas turinys buvo atkurtas.   Išvalyti redaktorių

×   You cannot paste images directly. Upload or insert images from URL.

Įkraunama...
  • Dabar naršo   0 narių

    Nei vienas registruotas narys šiuo metu nežiūri šio puslapio.

×
×
  • Pasirinkite naujai kuriamo turinio tipą...