8
votes

Les méthodes Java peuvent-elles renvoyer le type d'énorme?


4 commentaires

Vous souhaitez renvoyer un Enum type ou un Enum Valeur?


Je ne suis pas sûr que le titre de la question est le plus approprié. Que veux-tu réellement faire?


Désolé pour la confusion, et je pouvais certainement me tromper dans ce que j'essaie de faire de l'accouchement (ma pensée commence à aller avec elle en fin d'après-midi) mais je pensais que je voudrais peut-être avoir une méthode renvoyer une éducation générique pas Un membre d'un énumé.


Vous ne pouvez pas faire cela, mais vous pouvez retourner toutes les valeurs d'un énumé.


7 Réponses :


2
votes

Qu'essayez-vous d'accomplir? C'est un moyen de renvoyer un Enum : xxx

mais, je suppose que ce n'est pas ce que vous allez?


1 commentaires

En fait, je ne veux pas de ce code; Semble comme une chose étrange de faire du tout :)



1
votes

Oui, c'est certainement possible. XXX

Si votre question concerne déclarer Enums, vous pouvez les déclarer:

  • Dans leur propre fichier Java, similaire à une classe de niveau supérieur ;
  • dans un fichier Java appartenant à une autre classe, similaire à un class interne statique ;

0 commentaires

1
votes

Pas totalement sûr de ce que votre objectif est, mais si vous vouliez renvoyer une méthode générée (c'est-à-dire qui serait remplacé), vous pouvez avoir quelque chose comme ce qui suit:

public class MyEnumClass<T extends Enum<T>> {
    public T resources() {
        //do stuff here
    }
}


0 commentaires

1
votes

Vous pouvez vous référer à une valeur d'un énumé par son nom, par exemple. Costume.spades.

Vous pouvez itérer sur toutes les valeurs en utilisant la méthode Valeurs () et choisissez l'une des valeurs.


0 commentaires

3
votes

Tous les Enums implémentent l'interface Enum, afin que vous puissiez certainement écrire une méthode qui renvoie une énumération de cette façon. Mais cette méthode reviendra une seule valeur enum. Il n'ya aucun moyen de retourner une valeur générique qui englobe toute l'énumérum (en dehors de le retour de la classe et de la réflexion). Vous pouvez cependant renvoyer toutes les valeurs ENUM qui sont plus ou moins ce que vous voulez, je pense.

public interface Resources {}
enum SomeResources implements Resources { ONE, TWO, THREE }
enum MoreResources implements Resources { UN, DEUX, TROIS }
private Resources[] resources() {
    List<Resources> resources = new ArrayList<Resources>();
    resources.addAll(Arrays.asList(Resources.values());
    resources.addAll(Arrays.asList(MoreResources.values());
    return resources.toList(new Resources[] {});
}


0 commentaires

4
votes

Le point de vue de la façon dont Java est enums, c'est qu'ils sont Typeafe - de sorte que vous ne retourneriez pas un énumé (qui serait double-plus non gagnant), vous retournez le type réel que vous définissez (comme "costume") qui agit comme une classe. Costume a 4 instances "énumérées".

Si vous attendiez un "costume", à quoi sert-il de retourner un "rang" de 7? Cela briserait tout!

Également si vous avez passé une "Enum" ou une valeur générique, vous ne pouvez pas appeler des méthodes dessus. La chose la plus cool à propos de Typeafe Enums est que vous pouvez simplement obtenir un "costume" et appeler "costume.getcolor ()" et s'attendre pleinement à obtenir la couleur de cette combinaison. Vous pouvez également avoir un classhigherthan (costumes) qui pourrait remplir: xxx

ou, plus important encore: xxx

( En supposant qu'ils ont été tous deux passés et que vous ne savez pas ce qu'ils sont)

La sécurité est vraiment incroyable (même si cela ressent un peu mal à l'aise au début), embrasse-le.


0 commentaires

8
votes

Je pense que vous êtes correct, il ne sera possible que de retourner null ou un enum déclaré ailleurs. Mais vous n'avez pas nécessairement de préciser que "quelque chose d'autre" lors de la compilation de compilation. XXX

Plus tard, vous l'invoquez en spécialisant le constructeur générique et en passant dans la classe Enum qui vous intéresse : xxx

(évidemment c'est un exemple artificiel et dans la vie réelle, vous devriez simplement appeler foo.values ​​(), mais vous obtenez l'idée.)


3 commentaires

Pouvez-vous s'il vous plaît ajouter comment utiliser cette classe?


p.s. Pour obtenir la gamme de valeurs, vous pouvez simplement faire valeurs = Enumclass.getenumConstants ()


Comme je l'ai dit, c'est un exemple artificiel. :)