Le titre explique à peu près la question. J'ai une méthode d'interface: et j'ai une classe, autre que la copie manuelle de l'énumget à utilisateur code> qui ressemble à ce que ceci p>
utilisateur code> S
getfieldset () code> méthode. La voie naïve semble juste
retournettette.allof (champs.class) code> mais je reçois l'erreur suivante: p>
Set
4 Réponses :
Vous pouvez retourner Cela se contentera du fait que vous ne pouvez pas attribuer une valeur de type Alternativement, votre interface pourrait être nouveau hashset
définir
définir
définir étend le champ> getfields () code> à la place. Vous peut em> assigner
définir
Notez que la construction d'un nouveau hashset entraînera la copie des entrées définies, ce qui supprime l'avantage de la performance de l'utilisation d'un énumexe en premier lieu.
Ouais. Votre réponse est meilleure :)
Le retour des types de caractères génériques des API est généralement découragé: elle ajoute une complexité aux classes appelant l'API. Probablement mieux pour simplement renvoyer un Set
@Daniel: Je suis d'accord. Cela rend les choses plus complexes, mais dans certains cas, il est toujours utile. Je l'ai mentionné que parce que c'est une solution possible i> en fonction de la conception globale des OPS.
Bon point. Il semble que c'est une meilleure idée de SPIS, de rendre les interfaces plus flexibles, de sorte que le fournisseur de mise en œuvre retourne tout ce qu'ils veulent.
Voici, je pense une bonne solution. Ce n'est pas exactement ce que vous voulez, mais plus près
import java.util.EnumSet; import java.util.Set; public class User { enum Fields implements Field { USERNAME, PASSWORD; } Set< ? extends Field> getFieldSet() { return EnumSet.allOf(Fields.class); } }
Utilisez Collections.unmodifiaSet :
return Collections.<Field>unmodifiableSet(EnumSet.allOf(Fields.class));
définir code>, pas un définit étend le champ> code> li>
- L'ensemble n'est pas copié, seulement enveloppé li>
- L'ensemble renvoyé ne peut pas être muté li>
ul>
contre: p>
- L'ensemble retourné ne peut pas être muté, mais il ne serait pas sûr de le faire de toute façon. Li>
ul> p>
La raison pour laquelle cela ne fonctionne pas est que Votre meilleure option ici est d'utiliser un Différent mise en oeuvre définie (généralement un ensemble non modifiable) pour renvoyer les valeurs. Par exemple: p> ou, si vous avez besoin de l'ensemble pour être mutable (probablement pas une bonne idée, généralement) p> définir
SET
Set
Vous ne pouvez pas simplement le jeter à
définir code>?
@ALEX: Non, ce n'est pas autorisé en Java. Si vous pourrait i> faire cela alors cela pourrait entraîner des problèmes, par exemple:
définir o = nouveau hashset (); O.Ajouter ("Je ne suis pas un entier"); code>