J'ai travaillé sur un simulateur d'économie Java et j'ai rencontré un roadblock. J'ai une classe Économie qui possède un vecteur de Traders. À chaque itération, la classe Economie appelle chaque Trader pour mettre à jour() et décider quels métiers il souhaite placer. La fonction update() renvoie les transactions souhaitées à ajouter à la file d'attente dans la classe Economy. J'ai été en mesure de mettre en œuvre tout ce qui précède correctement, mais j'ai toujours besoin de Trader pour être en mesure de voir combien de métiers il a actuellement ouvert. Depuis les métiers sont stockés dans la classe économie parent, comment dois-je concevoir le code de sorte que le Traders ont accès aux fonctions Economy et les variables?Situation difficile où l'accès aux fonctions parentes est nécessaire en Java
Répondre
Étant donné que la classe Trader a besoin d'accéder aux méthodes de la classe Economy, la méthode correcte consiste à "injecter" une instance d'une classe Economy dans la classe Trader. Vous pouvez le faire soit avec le constructeur:
public Trader(Economy economy) {
this.economy = economy;
}
ou avec un setter:
public void setEconomy(Economy economy) {
this.economy = economy;
}
Soyez toutefois prudent de concevoir la classe économie correctement. L'accès aux variables de la classe Économie doit être limité aux méthodes de la classe uniquement. Définissez les getters et les setters si vous voulez y accéder en externe. Si je comprends bien, les commerçants devraient seulement extraire des informations d'une économie. Ils ne devraient pas être en mesure d'appeler des méthodes qui modifient l'état de l'économie. Cela devrait être reflété sur votre conception.
Vous pouvez également envisager de définir une interface:
interface IEconomy {
List<Trade> getTrades(Trader trader);
}
et la mettre en œuvre par la classe économique. Puis injectez un IEconomy au commerçant. Cela rend assez évident quelles parties de l'économie un commerçant devrait utiliser.
public class Trader {
private Economy parent;
...
public Trader(Economy parent, ...) {
this.parent = parent;
}
}
Maintenant, le négociateur devrait avoir accès à l'économie parente.
Ou:
public onUpdate(Economy parent) { ... }
si vous le souhaitez.
La méthode mise à jour dans le Trader classe peut prendre un argument, à savoir une référence à la classe Economy , que vous pouvez passer en utilisant ce . Ensuite, Economy peut fournir les méthodes nécessaires pour extraire l'information désirée.
- 1. Question A propos Deadlock Situation en Java
- 2. Services Web Java - L'axe est-il nécessaire?
- 3. Accès aux propriétés/méthodes parentes dans Actionscript 3.0
- 4. Accès aux variables parentes dans la méthode enfant
- 5. Passer des expressions aux fonctions en python?
- 6. Comment faire pour transférer des événements asynchrones aux classes parentes?
- 7. API J2ME difficile à trouver
- 8. Objet d'application Java ... où est-il stocké?
- 9. Html.BeginForm() est-il nécessaire?
- 10. KillTimer est-il nécessaire?
- 11. Est-il nécessaire d'utiliser InitCommonControlsEx() et InitCommonControls()?
- 12. Passage de soi aux fonctions de classe en Python
- 13. TSQL difficile jointure problème
- 14. Tricky inclure situation dans C
- 15. Est-ce que c'est nécessaire?
- 16. Quel est le moyen le plus pratique d'avoir des "fonctions dans un dictionnaire" en Java?
- 17. À quel point est-il difficile d'utiliser NetBeans RCP?
- 18. Qu'est-ce qui doit être sérialisable dans cette situation Java?
- 19. requête SQL difficile
- 20. Où va java stderr?
- 21. algorithme crc difficile
- 22. Accès aux données parentes dans le répéteur imbriqué, dans le HeaderTemplate
- 23. Où est groovy.swing.factory.BindProxyFactory?
- 24. Meilleure infrastructure pour une situation
- 25. Branchement aux compilateurs Java
- 26. en passant le tampon char aux fonctions et en obtenant la taille du tampon
- 27. Y at-il une situation dans laquelle il serait utile ou nécessaire de "relier" les fichiers d'en-tête? (C++)
- 28. Comment évaluer une situation de connexion de quatre jeux en java
- 29. Rails situation simple routage
- 30. MaskedEditExtender est trop difficile à utiliser pour l'argent