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");
}
}
}
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?
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!