2017-10-14 5 views
1

Donc, je pense que mon design a été quelque peu désordonné, Voici ce que j'ai obtenu.Utiliser les méthodes de classe en utilisant la réflexion

Mon application a besoin de beaucoup d'enums, chacun contient plusieurs objets initialisés et une méthode "Get Best".

enum MyNumberEnum{ 
First("First", 1) 
Third("Third", 3) 

public String name; 
public int num; 

MyNumberEnum getBest(int num){ 
      MyNumberEnum bestNumber = First; 
     for (MyNumberEnum number: MyNumberEnum.values()) { 
      if (number.num <= num) 
       bestNumber = number; 
     } 
     return bestNumber ; 
} 
} 

Tous les énumérations ont la même getBest et tous devraient avoir le champ num, Parce que énumérations ne peut pas étendre, pensée l'interface peut-être pourrait aider ici, mais si un ENUM implémente une interface alors chacun il y a des cas mettre en œuvre tout simplement pas l'enum itslef. J'ai donc pensé que peut-être créer une classe et à l'intérieur mettre l'énumération, alors je pourrais étendre la méthode get best.

Donc pour le rendre facile à utiliser, j'ai créé un HashMap Et puis ajouté map.put (« Numéro », MyNumberClass.class)

Mais je suis arrivé à un point que je suis l'objet de classe, Comment puis-je utiliser sa méthode getBest?

Merci et désolé pour ma stupidité!

+0

vous dire que vous avez l'instance de classe ou de type? – nullpointer

+0

@nullpointer J'utilisé map.put ("Numéro", MyNumberClass.class) Alors je me MyNumberClass.class Je pense qu'il est le modifier le type de classe : Le hashmap decleration HashMap > –

+1

Cela vous aidera à aller https://docs.oracle.com/javase/tutorial/reflect/member/methodInvocation.html...cheter quelque chose et revenir si cela ne fonctionne pas. – nullpointer

Répondre

1

Utilisation du doc: https://docs.oracle.com/javase/tutorial/reflect/member/methodInvocation.html

je: retour (Enum) enumMap.get (enumName) .getDeclaredMethod ("getBest", Script.class) .invoke (null, api);

Pensée car elle hérite de la classe Best, et de sa méthode statique. il pourrait utiliser quelque chose de plus facile comme .getBest() Apparemment, il ne peut pas.

Merci @nullpointer