résolution d'erreur du getter java setter

table des matières

Une histoire à laquelle j'étais accro pendant une semaine à cause d'une erreur de compilation entre getter et setter

C'est pourquoi j'ai écrit cet article. Si vous voulez juste savoir comment écrire, cet élément est recommandé via.

Actuellement en train d'apprendre le langage Java, la programmation elle-même est un débutant. Tout d'abord, faites quelque chose qui fonctionne! Dans cet esprit, toutes les variables sont décrites en public et l'orientation objet est reportée. Cette fois, j'ai décidé de coder avec une programmation orientée objet, mais j'étais accro à l'erreur dans les parties setter et getter, et j'ai passé une semaine à la résoudre.

Même si je cherche avec setter et getter, tout ce qui ressort, c'est l'histoire du groupe qui n'en a pas besoin, et il n'y a rien qui explique mon erreur de grammaire ou de fonction, donc j'étais très inquiet, alors j'ai écrit un article comme celui-ci Je suis. Les détails de l'erreur seront décrits plus loin.

Environnement prérequis

Langage Java-12.0.1 Écrit dans un éditeur de texte

grammaire

Tout d'abord, comment écrire setter et getter.

SetGet.java


//Classe de déclaration de variable
class SetGet{

  //Déclaration de variable en privé
nom de variable de type privé;

  // getter
nom de variable de type public{
    return this.Nom de variable;
  }

  // setter
nom de variable public void(Type Nom de variable approprié){
    this.Nom de variable=Nom de variable approprié;
  }

}

Ensuite, comment écrire dans la classe d'exécution

SetgetRunner.java


//Classe d'exécution
class SetGetRunner{
  public static void main(String[] args){
    //Création de variables et d'instances de référence de classe
    //Dans ce cas, nom de classe = SetGet
Variable de référence de nom de classe=nouveau nom de classe();

    //Attribuer une valeur à une variable déclarée privée dans la classe SetGet
Variable de référence.définir le nom de la variable(Valeur que vous souhaitez attribuer);

    //Obtenez de la valeur
Saisissez le nom de la variable 2=Variable de référence.obtenir le nom de la variable();
  }
}

Si vous l'expliquez en japonais, cela ressemblera à ce qui précède. Cependant, c'est très difficile à comprendre, alors écrivons-le.

Setget2.java



//Classes pour getter et setter
class SetGet2{
  //Déclarer la variable de type int apple en privé
  private int apple;

  // getter
  public int getApple(){
    return this.apple;
  }

  // setter
  public void setApple(int apple){
    this.apple = apple;
  }
}

//Classe d'exécution
class SetGet2Runner{
  public static void main(String[] args){
    //Création de variables de référence et d'instances pour les classes
    SetGet2 setget2 = new SetGet2();
    
    //Affecter à une variable déclarée privée
    setget2.setApple(3);
    
    //Obtenez de la valeur
    int appleQuantity = setget2.getApple();
   
    //production
    System.out.println("Nombre de pommes:" + appleQuantiry + "Ko");

    //Résultat de sortie
    //Nombre de pommes: 3
  }
}

Ce sera.

une fonction

Ensuite, je vais expliquer la fonction. getter et setter "En orientation objet, les variables d'une instance représentent l'état interne, et il est basé sur l'idée qu'elle ne doit pas être directement référencée ou manipulée de l'extérieur. Assurez-vous de passer par la méthode correspondant à l'accès aux variables, etc. Cela présente l'avantage de pouvoir vérifier et traiter correctement au sein de la méthode et contrôler l'accès de l'extérieur afin qu'il n'y ait pas de panne. "

getter "Méthode de lecture / acquisition / référencement des valeurs des variables membres (attributs, propriétés) à l'intérieur d'un objet depuis l'extérieur"   settter "Méthode d'écriture / d'exploitation / de définition de la valeur des variables membres (attributs, propriétés) à l'intérieur de l'objet depuis l'extérieur"

(Ce qui précède est extrait de IT Glossary e-words)

une. En termes simples, pourquoi l'idée de programmation orientée objet est utilisée. Cela signifie restreindre l'accès de l'extérieur pour éviter les erreurs et les erreurs.

getter est une méthode pour obtenir une valeur de l'extérieur, et setter est une méthode pour la manipuler de l'extérieur.

Comme vous pouvez le voir dans l'explication ci-dessus, il fonctionne en fait sans setter si vous ne le faites pas fonctionner de l'extérieur. Vous n'avez besoin de setter que pour opérer à partir d'une classe externe, donc vous n'en avez pas besoin si vous utilisez simplement des variables. Ce que vous faites dans la classe d'exécution est simplement d'appeler les méthodes getter et setter dans la classe de déclaration.

Contenu d'opération spécifique

J'expliquerai spécifiquement comment chacun fonctionne en utilisant le fichier Setget2.java mentionné ci-dessus.

Setget2.java


  Setget2 setget2 = new SetGet2();

En déclarant une variable de type référence et en créant une instance, vous pouvez gérer la classe Setget2. Pour les variables de type de référence et les instances, si vous voulez comprendre en Java, ce HP est très facile à comprendre, alors veuillez vous y référer.

Setget2.java


setGet2.setApple(3);

J'appelle la méthode setter de la classe SetGet2 en utilisant la variable de type de référence que je peux gérer plus tôt.

SetGet2.java


public void setApple(int apple){
  this.apple = apple;
}

C'était écrit comme ça dans la méthode setter. En ajoutant la valeur numérique 3 à int apple, la valeur donnée à la variable apple de la classe SetGet2 est affectée. C'est ce que nous faisons en attribuant la valeur de la classe d'exécution.

Vient ensuite le mouvement du côté de l'acquisition de valeur.

Setget2.java


int appleQuantity = setget2.getApple();

Dans la classe d'exécution, la méthode getter de la classe SetGet2 est appelée et affectée à la variable appleQuantity.

SetGet2.java


public int getApple(){
  return this.apple;
}

Il y a une valeur de retour ici. Vous avez utilisé la méthode pour renvoyer la pomme à laquelle la valeur a été affectée dans le setter plus tôt à la classe d'exécution. AppleQuantity est déclaré comme une boîte qui gère la valeur de retour, et il est enfin possible de gérer des variables d'une autre classe.

Au fait, la classe d'exécution déclare à nouveau une nouvelle variable et utilise une variable d'une autre classe, mais en en faisant une condition de l'expression, il est possible d'utiliser une variable d'une autre classe sans utiliser de variable.

Par exemple dans une autre classe

Mass.java


private int colum;
private int row;

Supposons que vous déclariez. Après avoir attribué la valeur avec le setter

MassRunner.java


ArrayList<Integer> data;

for(int i = 0; i < mass.getColum() * mass.getRow; i++){
  this.data = new ArrayList<Integer>;
  this.data.add(i);
}

Ce faisant, chaque valeur peut être utilisée sans la mettre dans une variable. Après tout, nous avons besoin d'une variable pour affecter le résultat de l'expression ...

L'erreur qui s'est produite cette fois

Jusqu'à présent, je suis finalement arrivé au contenu d'erreur auquel j'étais accro pendant une semaine. Le code où l'erreur s'est produite est le suivant.

Game.java


class Card{
  //Déclaration des variables
  private int mark;
  private int number;

  // getter setter
  public int getMark(){
    return this.mark;
  }

  public void setMark(int mark){
    this. mark = mark;
  }

  public int getNumber(){
    return this.number;
  }

  public void setNumber(int number){
    this.number = number;
  }
}

class Deck{
  Card card = new Card();
  card.setMark(4);
  card.setNumber(13);

  //Déclaration d'un deck vide
  ArrayList<Integer> deckCard = new ArrayList<Integer>();

  //Créer un deck
  public Create(){
    for(int i = 1; i < card.getMark() * card.getNumber(); i++){
    this.deckCard.add(i);
    }
  }
}

class Game{
  public static void main(String[] args){
    Deck deck = new Deck();
    deck.Create();
  }  
}


Déclaration d'erreur

Erreur:Début de type illégal
  card.setMark(4);
  ^
Erreur: <identifier>il n'y a pas
  card.setMark(1);
               ^
Erreur:Début de type illégal
  card.setNumber(13);
  ^
Erreur: <identifier>il n'y a pas
  card.setNumber(13);
               ^

Cause

Comme vous pouvez le voir en le comparant à l'exemple de phrase, définissez Il n'y a pas de méthode principale dans la classe. J'ai pu obtenir la valeur dans une classe sans la méthode principale, mais il semble que je ne puisse pas manipuler la valeur sans la fonction principale.

Je ne savais pas que je ne pourrais définir la valeur que plus tard dans la fonction principale, et j'y ai été accro pendant une semaine car je ne regardais que la grammaire du setter et du getter. En comparant mon code avec le code de référence, c'était une erreur car la plage que je regardais était étroite.

Soyez prudent aussi. Je ne comprends pas pourquoi il ne peut être exécuté que par la méthode principale, alors j'attendrai que quelqu'un d'autre l'explique.

Je voudrais demander à des personnes bien informées si cela est nécessaire ou non en premier lieu.

Merci pour la lecture.

référence

11 août 2014 Première édition de Kiyotaka Nakayama / Daigo Kunimoto, publiée par Impress Co., Ltd. [Introduction à Java 2nd Edition](https://www.amazon.co.jp/%E3%82%B9%E3%83%83%E3%82%AD%E3%83%AA%E3%82] % 8F% E3% 81% 8B% E3% 82% 8BJava% E5% 85% A5% E9% 96% 80-% E7% AC% AC2% E7% 89% 88-% E3% 82% B9% E3% 83 % 83% E3% 82% AD% E3% 83% AA% E3% 82% B7% E3% 83% AA% E3% 83% BC% E3% 82% BA-% E4% B8% AD% E5% B1% B1-% E6% B8% 85% E5% 96% AC / dp / 484433638X) ISBN 9784-8443-3638-9

Consulté le 4 juillet 2019 Introduction facile à Java

Consulté le 4 juillet 2019 Introduction to Java Object Orientation

Consulté le 4 juillet 2019 IT Glossary e-word

Recommended Posts

résolution d'erreur du getter java setter
Erreur java d'aujourd'hui
contre-mesures d'erreur java
Pièges d'erreur Java Math.sqrt
Résolution d'erreur sur Heroku
[Débutant] Méthode / encapsulation de champ de classe Java (getter setter) [Note 25]
Erreur de virgule flottante Java
Erreur lors de la lecture avec java
Notes d'opération @Getter @Setter de Lombok
Résumé du traitement des erreurs Java
Génération automatique de constructeur, getter / setter
Méthode de résolution d'erreur Spring Boot + PostgreSQL
Résolution d'erreur du code de sortie 1 de validation