BookeldOr (./11) :
Il peut très bien être sûr de n'appeler cette fonction dans le programme qu'avec des valeurs adéquatement construites et ne pas polluer son code
En fait, je ne vois justement pas comment on peut passer autre chose qu'une valeur valide de l'enum... (même volontairement)

En C++, on peut effectivement faire un truc du style :
#include <iostream>
enum Solver { ABAQUS= 0, CAST3M= 1 } ;
int main()
{
int value ;
enum Solver solver= static_cast<enum Solver>(0xDEAD) ;
switch ( solver ) {
case ABAQUS:
value= 0 ;
break ;
case CAST3M:
value= 1 ;
break ;
}
std::cout << "value==" << value << std::endl ;
}
Mais en JAVA, un code du genre de celui ci :
public class Main
{
public static enum Solver
{
ABAQUS, CAST3M ;
}
public static void main( String[] args )
{
int value ;
Solver solver= (Solver)new Integer(0xDEAD) ;
switch ( solver ) {
case ABAQUS:
value= 0 ;
break ;
case CAST3M:
value= 1 ;
break ;
default:
throw new AssertionError() ;
}
System.out.println(value) ;
}
}
ne compile même pas, donc je ne vois pas l'intérêt de forcer le default ! (il est possible qu'on puisse le faire quand même en fait, je n'en sais rien...)
Flanker > bof, oui, m'enfin c'est nettement moins lisible...

(pour l'instant je pars du principe qu'on ne peut pas passer autre chose que l'enum prévu et que c'est donc bien équivalent)
Tu me diras, pour améliorer la lisibilité, rien n'empêche d'écrire :
public class Main
{
public static enum Solver
{
ABAQUS, CAST3M ;
}
public static void main( String[] args )
{
int value ;
Solver solver= Solver.CAST3M ;
switch ( solver ) {
case ABAQUS:
value= 0 ;
break ;
case CAST3M:
default:
value= 1 ;
break ;
}
System.out.println(value) ;
}
}
mais bon c'est pas terrible non plus dans la mesure où je ne vois toujours pas comment on peut passer autre chose qu'une valeur valide de l'enum
