[JAVA] J'ai essayé la bibliothèque AutoValue avec Intellij

Qu'est-ce que c'est

Si vous lisez Effective Java 2nd Edition and 3rd Edition \ -Qiita, vous pouvez lire Autovalue sur google. / google / auto) a été introduit, alors je l'ai essayé.

Tutoriel Si vous suivez les instructions, vous pouvez tout essayer, mais comme les paramètres d'environnement d'Intellij étaient requis, c'est le principal. ..

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>tada.suzu</groupId>
  <artifactId>autoValueTest</artifactId>
  <packaging>jar</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>autoValueTest</name>
  <url>http://maven.apache.org</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
       <java.version>1.8</java.version>
    </properties>
    
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>com.google.auto.value</groupId>
      <artifactId>auto-value-annotations</artifactId>
      <version>1.6</version>
    </dependency>
    <dependency>
      <groupId>com.google.auto.value</groupId>
      <artifactId>auto-value</artifactId>
      <version>1.6</version>
      <scope>provided</scope>
    </dependency>

  </dependencies>
</project>

Je m'en fiche car la version de JUnit est exactement la même que la valeur initiale lorsqu'un nouveau projet maven est créé.

Préférences Intellij

Si vous conservez la valeur par défaut, une erreur de compilation se produira, alors définissez-la.

package tada.suzu;

import com.google.auto.value.AutoValue;

@AutoValue
abstract class Animal {
    static Animal create(String name, int numberOfLegs) {
        //Où AutoValue_Une erreur se produira s'il n'y a pas de classe appelée Animal
        return new AutoValue_Animal(name, numberOfLegs); 
    }

    abstract String name();
    abstract int numberOfLegs();
}

  1. Cliquez sur Fichier → Paramètres

    setting.png

  2. Sélectionnez Build, Execution, Depeloyment → Compiler → Annotation Processors.

  3. Sélectionnez un projet et modifiez le répertoire des sources de production et le répertoire des sources de test.

    annotation.PNG

  4. Après avoir fermé Settings, compilez à partir du menu Build pour générer AutoValue_Animal.java sous src / main / generated.

  5. Cliquez avec le bouton droit sur le dossier généré et sélectionnez Generated Source Root dans le menu Mark Directory as pour l'ajouter à votre chemin de génération.

    mark.png

Avec ce qui précède, l'erreur de compilation disparaît et il est prêt à fonctionner.

Eh bien, il a été presque écrit dans stackoverflow, donc je prends personnellement juste une note sur la façon de l'utiliser.

Essayez de bouger

Je viens de coller ce qui était écrit dans le document

    public void testAnimal() {
        Animal dog = Animal.create("dog", 4);
        assertEquals("dog", dog.name());
        assertEquals(4, dog.numberOfLegs());

        // You probably don't need to write assertions like these; just illustrating.
        assertTrue(Animal.create("dog", 4).equals(dog));
        assertFalse(Animal.create("cat", 4).equals(dog));
        assertFalse(Animal.create("dog", 2).equals(dog));

        assertEquals("Animal{name=dog, numberOfLegs=4}", dog.toString());
    }

Vue personnelle

Au début, je me demandais si je devais être conscient de la classe qui était automatiquement générée à partir de l'annotation AutoValue_Animal.java, mais lorsque le nombre de variables augmentait, l'annotation était automatiquement égale (), hashcode (), toString (). Il peut être apprécié que le procédé est régénéré. Si vous voulez juste equals (), hashcode (), toString (), ce n'est pas très différent d'utiliser Lombok ou Kotlin. Il semble que les constructeurs avec des arguments et des setters / getters ne soient pas générés, il semble donc bon de les utiliser correctement en fonction de leur objectif.

Soit dit en passant, je me demande s'il y a une possibilité d'envisager de l'utiliser ou non au travail.

Recommended Posts

J'ai essayé la bibliothèque AutoValue avec Intellij
J'ai essayé d'installer le plug-in d'intégration Docker dans IntelliJ
J'ai essayé le nouveau yuan à Java
J'ai essayé d'organiser la session en Rails
J'ai essayé d'utiliser le profileur d'IntelliJ IDEA
J'ai essayé le nouveau profileur de fonctionnalités d'IntelliJ IDEA 2019.2.
J'ai essayé le problème FizzBuzz
J'ai essayé d'implémenter la méthode de division mutuelle d'Eugrid en Java
J'ai essayé la métaprogrammation avec Java
J'ai essayé d'utiliser le référentiel GitHub comme serveur de bibliothèque
J'ai essayé d'utiliser la bibliothèque CameraX avec Android Java Fragment
J'ai essayé de mettre Domino11 dans CentOS7
J'ai essayé le framework Java "Quarkus"
[Rails] J'ai essayé de supprimer l'application
Tri des données Décroissant, croissant / Rails
J'ai essayé d'utiliser l'API Elasticsearch en Java
J'ai essayé un problème de calendrier avec Ruby
J'ai essayé de résumer les méthodes utilisées
[Java] Utiliser la technologie cryptographique avec les bibliothèques standard
J'ai essayé d'implémenter le modèle Iterator
J'ai essayé de résumer l'API Stream
J'ai essayé d'incorporer une formule dans Javadoc
J'ai essayé de résoudre le problème de la séquence Tribonacci en Ruby, avec récurrence.
J'ai essayé d'utiliser pleinement le cœur du processeur avec Ruby
[Ruby] J'ai essayé de résumer les méthodes fréquentes dans paiza
[Ruby] J'ai essayé de résumer les méthodes fréquentes avec paiza ②
[Pour les débutants] J'ai essayé d'utiliser DBUnit avec Eclipse
Présentation de la bibliothèque
J'ai essayé d'implémenter des relations polymorphes à Nogizaka.
[Rails] J'ai essayé de faire passer la version de Rails de 5.0 à 5.2
[Pour les débutants] J'ai essayé d'utiliser JUnit 5 avec Eclipse
3 façons d'importer des bibliothèques dans Android Studio
J'ai essayé de résoudre le problème de la séquence Tribonacci en Ruby (temps limite 10 minutes)
J'ai créé une bibliothèque d'extension Ruby en C
J'ai essayé Spring.
[API] J'ai essayé d'utiliser l'API de recherche par code postal
J'ai essayé de toucher Docker pour la première fois
J'ai essayé de mettre Tomcat
Définir la source de l'ensemble de bibliothèques en tant que dépendance dans IntelliJ en tant que module distinct du projet
J'ai essayé de sortir quatre-vingt-dix-neuf en Java
J'ai essayé youtubeDataApi.
J'ai essayé de refactoriser ①
J'ai essayé de configurer tomcat pour exécuter le servlet.
J'ai essayé de développer une application en 2 langues
J'ai essayé de créer une compétence Alexa avec Java
J'ai essayé FizzBuzz.
J'ai essayé JHipster 5.1
Je veux obtenir la valeur en Ruby
J'ai trébuché lorsque j'ai essayé d'utiliser neo4j dans l'environnement jenv, alors prenez note
J'étais accro à NoSuchMethodError dans Cloud Endpoints
Essayé l'API Toot et Streaming de Mastodon en Java
J'ai essayé d'utiliser la fonction Server Push de Servlet 4.0
Je veux intégrer n'importe quel TraceId dans le journal