[JAVA] Ich habe die AutoValue-Bibliothek mit Intellij ausprobiert

Was ist das

Wenn Sie Effective Java 2nd Edition und 3rd Edition \ -Qiita lesen, können Sie Autovalue auf Google lesen. / google / auto) wurde eingeführt, also habe ich es versucht.

Tutorial Wenn Sie den Anweisungen folgen, können Sie alles ausprobieren. Da jedoch die Umgebungseinstellungen von Intellij erforderlich waren, ist dies die wichtigste. ..

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>

Es ist mir egal, da sich die JUnit-Version nicht vom ursprünglichen Wert geändert hat, als ein neues Maven-Projekt erstellt wurde.

Intellij-Einstellungen

Wenn Sie die Standardeinstellung beibehalten, tritt ein Kompilierungsfehler auf. Legen Sie ihn daher fest.

package tada.suzu;

import com.google.auto.value.AutoValue;

@AutoValue
abstract class Animal {
    static Animal create(String name, int numberOfLegs) {
        //Wo AutoValue_Ein Fehler tritt auf, wenn keine Klasse namens Animal vorhanden ist
        return new AutoValue_Animal(name, numberOfLegs); 
    }

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

  1. Klicken Sie auf Datei → Einstellungen

    setting.png

  2. Wählen Sie Build, Execution, Depeloyment → Compiler → Annotation Processors

  3. Wählen Sie ein Projekt aus und bearbeiten Sie das Produktionsquellenverzeichnis und das Testquellenverzeichnis.

    annotation.PNG

  4. Kompilieren Sie nach dem Schließen von Einstellungen über das Menü Erstellen, um AutoValue_Animal.java unter src / main / generate zu generieren.

  5. Klicken Sie mit der rechten Maustaste auf den generierten Ordner und wählen Sie im Menü Verzeichnis als Verzeichnis markieren die Option Generierter Quellstamm aus, um ihn Ihrem Erstellungspfad hinzuzufügen.

    mark.png

Mit dem oben genannten verschwindet der Kompilierungsfehler und es ist bereit zu arbeiten.

Nun, es wurde fast in [stackoverflow] geschrieben (https://stackoverflow.com/questions/46424952/cannot-resolve-symbol-with-autovalue-and-intellij), also notiere ich mir persönlich nur, wie man es benutzt.

Versuche dich zu bewegen

Ich habe gerade eingefügt, was in dem Dokument geschrieben wurde

    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());
    }

Persönliche Ansicht

Zuerst fragte ich mich, ob ich die Klasse kennen musste, die automatisch aus der Annotation AutoValue_Animal.java generiert wurde, aber als die Anzahl der Variablen zunahm, war die Annotation automatisch gleich (), Hashcode (), toString (). Es versteht sich, dass das Verfahren regeneriert wird. Wenn Sie nur equals (), hashcode (), toString () möchten, unterscheidet es sich nicht wesentlich von der Verwendung von Lombok oder Kotlin. Es scheint, dass Konstruktoren mit Argumenten und Setzern / Gettern nicht generiert werden, daher scheint es gut, sie entsprechend ihrem Zweck richtig zu verwenden.

Ich frage mich übrigens, ob es eine Möglichkeit gibt, darüber nachzudenken, ob ich es bei der Arbeit verwenden soll oder nicht.

Recommended Posts

Ich habe die AutoValue-Bibliothek mit Intellij ausprobiert
Ich habe versucht, das Docker Integration-Plug-In in IntelliJ zu installieren
Ich habe das neue Yuan-Problem in Java ausprobiert
Ich habe versucht, die Sitzung in Rails zu organisieren
Ich habe versucht, den Profiler von IntelliJ IDEA zu verwenden
Ich habe den neuen Feature-Profiler von IntelliJ IDEA 2019.2 ausprobiert.
Ich habe das FizzBuzz-Problem ausprobiert
Ich habe versucht, die Methode der gegenseitigen Teilung von Eugrid in Java zu implementieren
Ich habe versucht, Metaprogrammierung mit Java
Ich habe versucht, das GitHub-Repository als Bibliotheksserver zu verwenden
Ich habe versucht, die CameraX-Bibliothek mit Android Java Fragment zu verwenden
Ich habe versucht, Domino11 in CentOS7 zu integrieren
Ich habe das Java-Framework "Quarkus" ausprobiert.
[Rails] Ich habe versucht, die Anwendung zu löschen
Daten sortieren Absteigend, aufsteigend / Schienen
Ich habe versucht, die Elasticsearch-API in Java zu verwenden
Ich habe ein Kalenderproblem mit Ruby versucht
Ich habe versucht, die verwendeten Methoden zusammenzufassen
[Java] Verwenden Sie kryptografische Technologie mit Standardbibliotheken
Ich habe versucht, das Iterator-Muster zu implementieren
Ich habe versucht, die Stream-API zusammenzufassen
Ich habe versucht, eine Formel in Javadoc einzubetten
Ich habe versucht, das Problem der Tribonacci-Sequenz in Ruby mit Wiederholung zu lösen.
Ich habe versucht, den CPU-Kern mit Ruby voll auszunutzen
[Ruby] Ich habe versucht, die häufigen Methoden in Paiza zusammenzufassen
[Ruby] Ich habe versucht, die häufigen Methoden mit paiza ② zusammenzufassen
[Für Anfänger] Ich habe versucht, DBUnit mit Eclipse zu verwenden
Vorstellung der Bibliothek
Ich habe versucht, polymorph in Nogizaka zu implementieren.
[Rails] Ich habe versucht, die Version von Rails von 5.0 auf 5.2 zu erhöhen
[Für Anfänger] Ich habe versucht, JUnit 5 mit Eclipse zu verwenden
3 Möglichkeiten zum Importieren von Bibliotheken in Android Studio
Ich habe versucht, das Problem der Tribonacci-Sequenz in Ruby zu lösen (Zeitlimit 10 Minuten).
Ich habe eine Ruby-Erweiterungsbibliothek in C erstellt
Ich habe es mit Spring versucht.
[API] Ich habe versucht, die Postleitzahlensuch-API zu verwenden
Ich habe zum ersten Mal versucht, Docker zu berühren
Ich habe versucht, Tomcat zu setzen
Legen Sie die Quelle der Bibliothek als Abhängigkeit in IntelliJ als separates Modul des Projekts fest
Ich habe versucht, neunundneunzig in Java auszugeben
Ich habe youtubeDataApi ausprobiert.
Ich habe versucht, ① umzugestalten
Ich habe versucht, Tomcat so einzustellen, dass das Servlet ausgeführt wird.
Ich habe versucht, eine Anwendung in 2 Sprachen zu entwickeln
Ich habe versucht, Alexa-Fähigkeiten mit Java zu erstellen
Ich habe FizzBuzz ausprobiert.
Ich habe JHipster 5.1 ausprobiert
Ich möchte den Wert in Ruby erhalten
Ich bin gestolpert, als ich versucht habe, neo4j in der jenv-Umgebung zu verwenden. Machen Sie sich also eine Notiz
Ich war süchtig nach NoSuchMethodError in Cloud-Endpunkten
Versuchte Mastodons Toot- und Streaming-API in Java
Ich habe versucht, die Server-Push-Funktion von Servlet 4.0 zu verwenden
Ich möchte eine TraceId in das Protokoll einbetten