Enum déclarées hors de portée de classe
Je suis allé à cette interview pour un développeur de logiciel poste et ils m'ont donné un test avec un coin-cas-code situations, avec généralement de 4 options à choisir.
L'une des questions qui ont un enum déclarée en dehors de la portée de classe, j'ai rapidement coché la case "ne compile pas de" réponse et suis allé de l'avant avec les autres questions.
C'était quelque chose comme:
enum Colors {BLUE,RED,GREEN}
class Test {
//other code, not really important with my question
}
Ce code compile.
Outre le fait qu'une interview comme ça (peut ou peut ne pas être utile de savoir si l'on est un bon développeur, ce qui m'inquiète, c'est: pourquoi ai-je déclarer une énumération de ce genre? Pourquoi je ne peux faire cela avec enum?
J'ai fait quelques tests et découvert qu'il est visible à l'intérieur de la classe, mais pas à d'autres classes.
Note: j'ai marqué vraiment pauvre :P. j'ai eu le max sur la théorie, mais à proximité de la plus faible possible sur le coin de cas code de situations. Je ne pense pas que je vais faire le travail.
- Il sera visible par les autres classes dans le même espace de noms, non seulement à l'intérieur d'un fichier. La plupart des énumérations dans la BCL sont déclarées en dehors de la classe, tout comme l'exemple que vous avez fourni (sauf qu'ils sont publics). La question est donc pourquoi ne pas déclarer un enum comme ça?
- Il est utile de vérifier si quelqu'un a travaillé avec le java de contrôle d'accès et les classes ne sont pas 100% du formulaire public class A{private String champ; publique de la méthode(){}} par défaut.
- Oui, il est
Vous devez vous connecter pour publier un commentaire.
Ce n'est pas seulement les énumérations. Les énumérations sont juste des types particuliers de classes. En général, vous pouvez avoir plusieurs classes déclarées dans un fichier (tant que pas de deux d'entre eux sont publics).
Pas, sans un modificateur d'accès, l'enum est colis-privé. Cela signifie qu'il ne peut être utilisé par les classes du même package. Et vous ne pouvez pas faire cela seulement avec un enum, les cours peuvent également être faite colis-privé.
Plus d'infos: http://java.sun.com/docs/books/tutorial/java/javaOO/accesscontrol.html
Parfois cet idiome peut être sensible - par exemple, imaginez que vous avez un
UploadHandler
classe (ou quelque chose comme ça) qui peut renvoyer un état à partir d'un téléchargement. Il semble tout à fait faisable pour moi de mettre en œuvre ce statut comme un enum - et depuis l'enum (par exempleUploadStatus
) clairement "appartient" à la UploadHandler de la classe, il semble bien à les déclarer dans le même fichier source. (Cela suppose bien sûr qu'il ne doit être colis-privé - si c'est vraiment de public, il devra être déclaré dans son propre fichier, ce qui est logique si ce n'est pas un interne chose de plus).Comme il arrive, dans ce cas, je serais probablement en faire un statique à l'intérieur de la classe pour rendre la relation plus explicite. Mais la déclaration de plusieurs classes dans le même fichier source n'est pas toujours mauvais, et peut parfois aider à la lisibilité par le réglage de l'attente que c'est limite banal, filiale de la classe. (Par la même occasion, je ne pense pas que les classes comme ceci devrait faire quelque chose de particulièrement complexe ou d'inattendu.)
Il compile en fait, sur mon Eclipse ! 😉
Plusieurs classes sont autorisés à être dans le même fichier. La limitation est qu'une classe doit être définie dans un fichier qui porte le même nom.
C'est la visibilité est "ensemble", de sorte qu'il devrait être visible dans d'autres classes du même package trop.
Vous pouvez faire ce que vous voulez avec les limitations ci-dessus...
Un enum spécifie une liste de valeurs constantes qui peuvent être attribués à un type particulier.
Il peut être soit à l'intérieur ou à l'extérieur de la classe.