J'ai 3 cours dans mon application Java, un représentant une politique médicale: une autre classe qui représente la stratégie motrice: p> Chaque fois que je déclare et initialiser un objet de stratégie médicale dans mon Comment puis-je accomplir ça? P> PS: Il n'y a pas de problème si je dois le régler / l'initialiser du constructeur, ce qui est important, c'est que je ne devrais pas passer la valeur de constructeur en tant que paramètre constructeur. p> < / p> principale () code>. p> principal () code> i Vous voulez le ID code> de la stratégie médicale d'incrémentation de 1, le même pour la stratégie motrice, c'est-à-dire si je déclare 2 objets de politique médicale dans mon principal () code> je veux la valeur de la 1ère politique médicale d'avoir le ID code> égal à 1 et la 2e politique médicale à avoir la valeur code> SET code> défini sur 2, et si je déclare 3 politique moteur, je Voulez-vous que le 1er ait code> ID code> égal à 1, la 2e's ID code> égal à 2 et le 3ème ID code> égal à 3. P>
4 Réponses :
Pourriez-vous ne pas créer une liste, puis chaque objet de cette classe serait associé à son emplacement d'incrémentation de l'indice. par exemple. ListName.get (Obj Num-1) Depuis que le premier objet sera stocké à l'index de 0. Aussi listName.Size () renvoie une valeur afin que vous puissiez suivre combien vous avez eu. p>
Si vous détenez des références à toutes les instances d'une classe, jamais créée, vous écrivez essentiellement la version Java d'une fuite de mémoire. Compte tenu de suffisamment de temps (et suffisamment d'invocations de constructeur de cette classe), le programme s'éteindra avec un OutofMemoryException code>.
Utilisez un à l'intérieur du constructeur, vous définissez l'ID sur la série et ajoutez-en une à la série. P> statique privé Int code> comme une variable d'instance public class MedicalPolicy implements PolicyType {
private static int serial = 1;
private int id;
// and some other fields
public MedicalPolicy(final LocalDate effective,
final LocalDate expiry,
final ArrayList<Beneficiary> beneficiaries){
this.id = serial++;
// Other constructor stuff
}
}
Comme je l'ai suggéré dans mon commentaire, j'ajouterais un la raison de l'utilisation de Un Avis, cependant, que cette implémentation ne compte que la fréquence à laquelle le constructeur a été appelé. Pour obtenir un nombre d'instances accessibles d'une classe donnée, il y a deux solutions à mon avis. On consiste à remplacer atomicinteger code> pour compter le nombre d'appels de constructeur: atomicinteger code> est la sécurité de thread-sécurité. P> finaliser () code> (qui est obsolète en Java 13). L'autre utilise une liste code> de PHANTOMReference code> s pour suivre les instances accessibles. P> p>
Pour être honnête, je n'ai pas compris ce que vous entendez par "instances accessibles", pour pouvoir initialiser une instance d'une classe (non statique), je dois utiliser un constructeur.
Java a un collecteur à ordures. Le collecteur des ordures déterminera lorsque des objets ne sont plus nécessaires et les destory. Ce compteur n'est pas capable de "voir" lorsque des objets sont détruits.
Vous pouvez utiliser atomicinteger < / a>, qui est utilisé dans des applications telles que des comptoirs atomiquement incrémentés.
Dans les deux classes: Déclarez un
Statique privé Statique AtomicInteger Comptoir = Nouveau atomicinteger (); code>, appelcomptoir.getandinCrement (); code> dans le constructeur.@ Turing85 Pourquoi devrait-il être final? Ne veut pas dire que cela ne peut pas être changé?
Non,
final code> signifie que la référence ne peut pas être réaffectée. Sa sémantique est différente deconst code> en C / C ++