Was ist Java <>?

Einführung

Hallo. Es ist Kecho. ** Benutzt ihr Generika? ** ** ** Ich habe heute zum ersten Mal gelernt. Ich meine, ich hatte es noch nie gesehen, aber ich bin endlich auf einen Ort gestoßen, an dem ich lernen konnte.

Szenen von Treffen mit Generika

Ich denke, derjenige, den ich am meisten treffe, ist die Liste. Ich denke, Sie haben die folgende Erklärung abgegeben.

List<String> list = new ArrayList<>();

Ich wusste nur, dass es sich um ein Array mit variabler Länge handelt. Klassen, die dieses <> verwenden, werden als generische Klassen bezeichnet.

Was für eine Rolle ist das?

List<String> list

Zuallererst dieser Teil. List ist eine Schnittstelle, die in erster Linie mehrere Elemente wie ein Array ** enthält und behandelt. Es sind nicht nur Zeichenfolgen, sondern auch verschiedene Arten von Objekten gespeichert. (Nur ein Typ.) Die obige Deklaration sieht also vor, dass String dieses Mal gespeichert wird.


new ArrayList<>();

Weiter dieser Teil. Das <> ist leer, aber ich lasse es einfach weg. (Der Typ kann aus der Zeichenfolge auf der linken Seite abgeleitet werden.)

Allgemeine Generika

Lassen Sie uns Generika aus einer breiteren Perspektive betrachten, nicht nur die Liste. Die einfache Definition lautet wie folgt.


public class Gene<T> {
	private T t;

	public void setT(T t) {
		this.t = t;
	}

	public T getT() {
		return t;
	}
}

Die Verwendung ist wie folgt

Gene<String> g1 = new Gene<>(); //Mit String-Typ behoben
Gene<Integer> g2 = new Gene<>(); //Als Integer-Typ behoben
g1.setT("test");
System.out.print(g1.getT()); // test
g2.setT(24);
System.out.print(g2.getT()); // 24

Was mich glücklich macht

In diesem Beispiel konnten wir mehrere Klassen für dieselbe Klasse verwenden.

Nein, ist das nicht in Ordnung?

public class GeneObj {
	Object t;

	public void setT(Object t) {
		this.t = t;
	}

	public Object getT() {
		return t;
	}
}

Ich habe versucht, die Object-Klasse für das Teil zu verwenden, das durch Typ T begrenzt war. Lass es uns benutzen.

GeneObj g1 = new GeneObj(); 
GeneObj g2 = new GeneObj(); 
g1.setT("test");
System.out.print(g1.getT()); // test
g2.setT(24);
System.out.print(g2.getT()); // 24

Sie könnten es mit ähnlichem Code schreiben.

Zusammenfassung

Muss ich Generika verwenden? ?? ??

Nein, nein

Beide funktionieren in diesem Beispiel, es gibt jedoch ein Problem bei der Verwendung von Object. Einfach ausgedrückt ist diese Klasse umständlich zu verwenden.

Verwendungsbeispiel, das einen Laufzeitfehler verursacht


GeneObj g1 = new GeneObj(); //Mit String-Typ behoben
g1.setT("1");
Integer res = (Integer) g1.getT() + 1; //Auftreten von ClassCastException
System.out.print(res);

Oben habe ich versehentlich einen String anstelle eines Integer-Typs gepackt. Daher trat beim Casting in die Integer-Klasse eine ClassCastException auf. Aus Sicht des Benutzers muss er den Typ kennen, den er gesetzt hat. Dies ist eine Brutstätte für Fehler. ** Bei Generics müssen Sie zunächst keine Besetzung verwenden, und Sie können dies mit einem Kompilierungsfehler feststellen. ** ** **

Zusammenfassung

Generika werden benötigt, um die Flexibilität des Typs und die Wartbarkeit des Codes in Einklang zu bringen

Recommended Posts

Was ist java
Was ist Java <>?
Was ist java
Was ist Java-Kapselung?
Was ist Java-Technologie?
Was ist Java API-Java?
[Java] Was ist flatMap?
[Java] Was ist ArrayList?
Was ist Java Assertion? Zusammenfassung.
Was ist eine Java-Sammlung?
[Java] Was ist jaee j2ee?
[Java] Was ist Klassenvererbung?
[Java-Grundlagen] Was ist Klasse?
Was ist Java-Fluchtanalyse?
Was ist Cubby?
Was ist null? ]]
Was ist Schlüsselumhang?
Was ist Maven?
Was ist Jackson?
Was ist Selbst
Was ist ArgumentMatcher?
Was ist IM-Jonglieren?
Was ist params
Was ist SLF4J?
Was ist Fassade? ??
Was ist Gradle?
Was ist POJO?
Was ist Thread-sicher (mit Java)
[Java] Was ist die Ausnahme für gleichzeitige Änderungen?
Was ist centOS?
Was ist RubyGem?
Was ist ein Lambda-Ausdruck (Java)
Was ist before_action?
Was ist Docker?
Was ist Byte?
Was ist Tomcat?
Was ist eine Klasse in der Java-Sprache (3 /?)
Was ist das beste Lesen von Dateien (Java)
Was ist eine Klasse in der Java-Sprache (1 /?)
Was ist Java und Entwicklungsumgebung (MAC)
Was ist eine Klasse in der Java-Sprache (2 /?)
Was ist die Hauptmethode in Java?
Was ist Maven Assembly?
Was ist Docker-Compose?
Was ist ein Konstruktor?
Was ist vue cli
Was ist eine Schnittstelle?
Was ist Rubys Selbst?
Was ist harte Codierung?
Was ist ein Stream?
Was ist Rubys attr_accessor?
Was ist Instanzsteuerung?
Was ist ein Initialisierer?
Was ist Spring Tools 4?
Was ist ein Operator?
Was ist Objektorientierung?
Was ist Guavas @VisibleForTesting?