Java - champ n'est pas visible
Dans le cadre de mon travail j'ai été donné un déjà préparé public static void main de la méthode. Mon travail est de compléter cela par la création de toutes les méthodes pertinentes pour cela. Cela devrait être fait dans les trois autres classes.
Dans le déjà préparé méthode principale, il y a le code suivant:
ticket = new LotteryTicket(10);
ticket.ticketOwner = new Player();
LotteryTicket
et Player
sont d'autres classes créé par moi. Pertinentes les variables d'instance dans le LotteryTicket
classe sont:
private LotteryRow[] rows;
private Player ticketOwner;
public LotteryTicket(int maxNumberOfRows) {
this.rows = new LotteryRow[maxNumberOfRows];
}
Player
est, comme mentionné, une autre classe que j'ai créé. Dans cette classe il y a, entre autres choses, une méthode pour l'utilisateur d'entrer des données telles que nom, adresse, code postal, etc.
Lorsque j'essaie d'exécuter le programme, j'obtiens une erreur dans le ticket.ticketOwner = new Player();
ligne. L'erreur est: "Le terrain LotteryTicket.ticketOwner
n'est pas visible"
Ce qui peut être la cause de cela? J'apprécierais toute aide! J'espère que le code que j'ai fourni est suffisant. Je n'ai pas rencontré ce message d'erreur avant, donc je suis à une perte de savoir quoi faire.
OriginalL'auteur Kristian | 2011-10-09
Vous devez vous connecter pour publier un commentaire.
Le coeur du problème est que le champ (
ticketOwner
) vous tentez d'accéder est marquéprivate
. Aussi, au moins à partir de ce que nous voyons, il semble manquer des accesseurs/mutateurs pour y accéder.Tout un quickfix pour ce qui est d'ajouter
getter/setters
et l'accès au terrain à l'aide, ou un vilain chemin est à faire sur le terrainpublic
. Mais vous voulez les lire sur...Votre meilleur pari (si un Joueur est nécessaire pour un LotteryTicket, ce qui me semble), c'est avoir l'
Player
exemple dans le constructeur deLotteryTicket
lui-même, donc il n'y a pas de charge supplémentaire.MODIFIER
Vos invocations devrait ressembler à ceci:
Player
instance avant de passer àLotteryTicket
. Et/Ou d'autres méthodes deLotteryTicket
fonctionner surticketOwner
.Merci. Je vais essayer de travailler avec ce.
OriginalL'auteur Saket
ticketOwner est déclaré en privé , il est donc normal de ne pas être visible dans l'exécution de votre classe.
au sein de la classe du billet que vous avez à ajouter une méthode de définition.
alors au lieu de
ne
OriginalL'auteur Genjuro
Elles ont été déclarées privées, de les déclarer comme public ou même en créer publics des getters/setters pour l'encapsulation.
Mieux pour l'injecter, plutôt que de laisser le constructeur de la créer (regardez Saket réponse, c'est la bonne façon de faire)
OriginalL'auteur NimChimpsky
Vous avez déclaré comme private var
OriginalL'auteur Jimmy Geers
private
signifie qu'il ne peut pas être accessible depuis une autre classe.Normalement, il est une méthode comme
setTickerOwner
d'un champ d'une autre classe.Dans ce cas, vous devez suivre ma suggestion et de créer un setter. La plupart des IDE fera automatiquement pour vous.
Merci. Je vais utiliser votre entrée, et les autres, comme je continue à travailler sur ce point.
OriginalL'auteur Peter Lawrey