Créer automatiquement des définitions de getter / setter Java

À propos de cet article

En Java, je pensais que getter / setter pouvait être défini de manière standard pour les champs de classe, y compris le nom de la fonction, j'ai donc écrit un script en Python 3 pour ne pas avoir à le saisir manuellement. Présenter.

En tant que getter / setter, ne considérez que les fonctions minimales. Par exemple, si vous souhaitez vérifier les valeurs non valides avec setter, ajoutez-le manuellement.

Environnement (à peu près)

Langue: Python3 OS: macOS (je pense que les autres OS sont bien)

Ce que je veux faire: définir getter / setter en Java

Je vais vous expliquer ce que je veux faire à travers un exemple.

Supposons que vous ayez une classe Wizard qui représente une sorcière et que vous ayez un nom qui représente un nom et un pouvoir qui représente le pouvoir magique sous forme de champs, comme indiqué ci-dessous.

Wizard.java


public class Wizard {
    private String name;
    private double power;
    ...
}

Dans ce cas, je voudrais définir getter / setter comme suit. Le nom de la méthode doit être sous la forme getName / setName pour le nom du nom de champ.

Wizard.java


public class Wizard {
    private String name;
    private double power;
    ...
    public String getName() {
        return this.name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public double getPower() {
        return this.power;
    }
    public void setPower(double power) {
        this.power = power;
    }
    ...
}

Exemple de script et d'exécution

scénario

Le script écrit est illustré ci-dessous.

Les trois premières lignes concernent l'emplacement du fichier. Le flux général est de lire les champs ligne par ligne et d'écrire getter / setter à partir du nom du type et du nom de la variable.

make_getter_and_setter.py


import os

path_of_this_script = os.path.dirname(__file__)
path_r = os.path.join(path_of_this_script, 'fields.txt')

with open(path_r) as f_r:
    for line in f_r: # line ex) "private double power;\n"
        line_list = line.rstrip().split(" ") # ex) ['private', 'double', 'power;']
        var_name = line_list[-1].rstrip(";") # ex) power
        pascal_var_name = var_name[0].upper() + var_name[1:] # ex) Power
        type_name = line_list[-2] # ex) double

        #getter ex)
        # public double getPower() {
        #     return this.power;
        # }
        print("public " + type_name + " get" + pascal_var_name + "()" + " {")
        print("    return this." + var_name + ";")
        print("}")

        #setter ex)
        # public void setPower(double power) {
        #     this.power = power;
        # }
        print("public void set" + pascal_var_name + "(" + type_name + " " + var_name + ")" + " {")
        print("    this." + var_name + " = " + var_name + ";")
        print("}")

Exemple d'exécution

Tout d'abord, pour l'utiliser, placez un fichier appelé fields.txt dans le même dossier que le script ci-dessus, puis copiez et collez les champs du code Java comme indiqué ci-dessous.

fields.txt


private String name;
private double power;

Ensuite, lorsque le script est exécuté, la définition de lecture / définition est sortie comme indiqué ci-dessous. Veuillez copier et coller ceci dans le code Java d'origine.

python


$ python make_getter_and_setter.py 
public String getName() {
    return this.name;
}
public void setName(String name) {
    this.name = name;
}
public double getPower() {
    return this.power;
}
public void setPower(double power) {
    this.power = power;
}

À la fin

Je l'ai fait pour le plaisir, donc je ne sais pas s'il sera réellement utilisé, mais c'était amusant d'écrire le script. Si vous avez des opinions ou des impressions, veuillez commenter.

Vous êtes libre de copier ou de modifier le code de cet article dans n'importe quel but.

Recommended Posts

Créer automatiquement des définitions de getter / setter Java
setter, getter
setter et getter