Uma de assert

Ola pessoal,
eu to com uma duvida nesta questao…
mas antes de perguntar…gostaria de saber o que vcs acham…

class Student{ private int iAge=0 ; public void setAge(int iAge){ this.iAge=iAge ; } public int getAge(){ return iAge ; } } public class School{ public static void main(String argv[]){ School s = new School() ; s.enroll(new Student()) ; } public void enroll(Student s){ assert s.getAge()>4 : ageMessage(s) ; } public void ageMessage(Student s){ if(s.getAge()==0){ System.out.println("age not initialized") ; }else{ System.out.println( "students must be older than 4 years"); } } }

até mais…

Bem, este código não compila porque a segunda expressão de um assert tem que ser uma expressão com um retorno para ser impresso na mensagem de erro caso a primeira seja falsa.
Ou seja, ageMessage(s) tinha que retornar algum valor e não void, entendeu?

ok ok…beleza…isso eu sabia… =)
na verdade eu nao me lembro de ter visto isso aqui …como resultado…

nessa questao foi perguntada quais linhas e porque ocasionavam erro…

a primeira resposta…foi essa sua ana…e a segunda…tbm na mesma linha era essa…

[quote]A runtime error occurs, because methods invoked via assert cannot take parameters.

assert s.getAge()>4 : ageMessage(s) ;

[/quote]

ou seja…

somente algo assim então ???

Valeu galera!! :wink:

Aonde você viu que dá runtime error se os métodos chamados pela assert tiverem parâmetros?
Porque motivo iria dar erro???
Não vi isso em lugar nenhum!

São 2 coisas que geram erro de compilação:

  • se a primeira expressão não tiver um retorno do tipo boolean
  • se a segunda expressão tiver retorno do tipo void

Para funcionar, bastaria mudar o método ageMessage e não a linha da assertion:

   public String ageMessage(Student s){
     if(s.getAge()==0){
         return "age not initialized";
     }else{
         return "students must be older than 4 years";
     }
   }

No caso dos parâmetros, talvez você tenha confundido com uma das regras de uso apropriado de assertions que diz que não se deve usar assertion para checar parâmetros de métodos públicos. Ou seja, é perfeitamente legal, não dá erro algum, porém não é apropriado segundo a Sun.
Tome cuidado! :wink:

pois é…pensei nisso tbm…

mas se poderia dar runtime ou nao…dai essa era minha duvia…

eu vou testar quando chegar em casa certinho…

Obrigado ana.