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.
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();
}
Klicken Sie auf Datei → Einstellungen
Wählen Sie Build, Execution, Depeloyment → Compiler → Annotation Processors
Wählen Sie ein Projekt aus und bearbeiten Sie das Produktionsquellenverzeichnis und das Testquellenverzeichnis.
Kompilieren Sie nach dem Schließen von Einstellungen über das Menü Erstellen, um AutoValue_Animal.java unter src / main / generate zu generieren.
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.
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.
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());
}
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