Lorsque vous définissez un enum pour quelque chose qui peut être "indéfini" dans vos interfaces, devez-vous
- définir une valeur d'énumération distincte pour cela, ou
- utiliser simplement enumValue = null pour ces situations ?
Par exemple,
serviceX.setPrice(Prix priceEnum)
enum Price {
CHEAP, EXPENSIVE, VERRRY_EXPENSIVE, UNKNOWN
}
et priceEnum.UNKNOWN si nécessaire
ou
enum Price {
CHEAP, EXPENSIVE, VERRRY_EXPENSIVE
}
et priceEnum = null lorsque cela est nécessaire ?
Nous avons un petit débat sur ce sujet. Quelques points qui me viennent à l'esprit :
- L'utilisation de Price.UNKNOWN permet d'économiser du code "if (price == null)". Vous pouvez gérer toutes les valeurs de Price x dans un seul cas de commutation.
- Selon la technologie d'affichage, il peut être plus facile de localiser Price.UNKNOWN
- L'utilisation de Price.UNKNOWN entraîne un problème de "nombre magique" dans le code, selon moi. Ici, nous avons Price.UNKNOWN, ailleurs peut-être Color.UNDEFINED, Height.NULLVALUE, etc.
- L'utilisation de priceValue = null est plus uniforme avec la façon dont les autres types de données sont traités en Java. Nous avons Integer i = null, DomainObject x = null, String s = null pour les valeurs inconnues également, n'est-ce pas ?
- Price.UNKNOWN vous oblige à décider si la valeur nulle est autorisée de manière universelle pour tous les cas d'utilisation. Nous pouvons avoir la méthode Price getPrice() qui peut retourner Price.UNKNOWN et setPrice(Price p) qui n'est pas autorisée à accepter Price.UNKNOWN. Comme Price.UNKNOWN est toujours inclus dans les valeurs de l'enum, ces interfaces ont l'air un peu malpropres. Je sais que priceValue = null a le même problème (vous ne pouvez pas définir dans l'interface si null est accepté ou non) mais cela semble un peu plus propre et un peu moins trompeur( ?).