Qu'est-ce que Java <>?

introduction

Bonjour. C'est Kecho. ** Utilisez-vous des génériques? ** ** J'ai appris pour la première fois aujourd'hui. Je veux dire, je ne l'avais jamais vu auparavant, mais je suis finalement tombé sur un endroit pour apprendre.

Scènes de réunion génériques

Je pense que celui que je rencontre le plus est la liste. Je pense que vous avez fait la déclaration suivante.

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

Je savais seulement que c'était un tableau de longueur variable. Les classes qui utilisent ce <> sont appelées classes génériques.

De quel genre de rôle s'agit-il?

List<String> list

Tout d'abord, cette partie. List est une interface qui contient et gère plusieurs éléments comme un tableau ** en premier lieu. Non limité à String, différents types d'objets peuvent être stockés. (Un seul type.) Ainsi, la déclaration ci-dessus stipule que String sera stocké cette fois.


new ArrayList<>();

Ensuite cette partie. Le <> est vide, mais je l'omets simplement. (Le type peut être déduit de la chaîne sur le côté gauche)

Génériques généraux

Parlons des génériques dans une perspective plus large, pas seulement de la liste. La définition simple est la suivante.


public class Gene<T> {
	private T t;

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

	public T getT() {
		return t;
	}
}

L'utilisation est la suivante

Gene<String> g1 = new Gene<>(); //Fixé avec le type String
Gene<Integer> g2 = new Gene<>(); //Fixé en tant que type Integer
g1.setT("test");
System.out.print(g1.getT()); // test
g2.setT(24);
System.out.print(g2.getT()); // 24

Ce qui me rend heureux

Dans cet exemple, nous avons pu utiliser plusieurs classes pour la même classe.

Non, n'est-ce pas bien?

public class GeneObj {
	Object t;

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

	public Object getT() {
		return t;
	}
}

J'ai essayé d'utiliser la classe Object pour la partie limitée par le type T. Utilisons-le.

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

Vous pouvez l'écrire avec un code similaire.

Résumé

Dois-je utiliser des génériques? ?? ??

Non non

Les deux fonctionnent dans cet exemple, mais il y a un problème avec l'utilisation d'Object. En termes simples, cette classe est difficile à utiliser.

Exemple d'utilisation qui provoque une erreur d'exécution


GeneObj g1 = new GeneObj(); //Fixé avec le type String
g1.setT("1");
Integer res = (Integer) g1.getT() + 1; //Occurrence de ClassCastException
System.out.print(res);

Ci-dessus, j'ai accidentellement compressé une chaîne au lieu d'un type Integer. Par conséquent, ClassCastException s'est produite lors de la conversion en classe Integer. Du point de vue de l'utilisateur, il doit connaître le type qu'il définit, qui est un foyer de bogues. ** Avec Generics, vous n'avez pas besoin d'utiliser un cast en premier lieu et vous pouvez le remarquer avec une erreur de compilation. ** **

Résumé

Des génériques sont nécessaires pour équilibrer la flexibilité du type et la maintenabilité du code

Recommended Posts

Qu'est-ce que 'java
Qu'est-ce que Java <>?
Qu'est-ce que 'java
Qu'est-ce que l'encapsulation Java?
Qu'est-ce que la technologie Java?
Qu'est-ce que Java API-java
[Java] Qu'est-ce que flatMap?
[Java] Qu'est-ce que ArrayList?
Qu'est-ce que l'assertion Java? Résumé.
Qu'est-ce qu'une collection Java?
[Java] Qu'est-ce que jaee j2ee?
[Java] Qu'est-ce que l'héritage de classe?
[Notions de base Java] Qu'est-ce que la classe?
Qu'est-ce que l'analyse Java Escape?
Qu'est-ce que Cubby
Qu'est-ce qui est nul? ]
Qu'est-ce que Keycloak
Qu'est-ce que maven?
Qu'est-ce que Jackson?
Qu'est-ce que soi
Qu'est-ce que ArgumentMatcher?
Qu'est-ce que IM-Juggling?
Qu'est-ce que les paramètres
Qu'est-ce que SLF4J?
Qu'est-ce que la façade? ??
Qu'est-ce que Gradle?
Qu'est-ce que POJO
Qu'est-ce que Thread Safe (avec Java)
[Java] Qu'est-ce que l'exception de modification simultanée?
Qu'est-ce que centOS
Qu'est-ce que RubyGem?
Qu'est-ce qu'une expression lambda (Java)
Qu'est-ce que before_action?
Qu'est-ce que Docker
Qu'est-ce que Byte?
Qu'est-ce que Tomcat
Qu'est-ce qu'une classe en langage Java (3 /?)
Quelle est la meilleure lecture de fichier (Java)
Qu'est-ce qu'une classe en langage Java (1 /?)
Qu'est-ce que Java et l'environnement de développement (MAC)
Qu'est-ce qu'une classe en langage Java (2 /?)
Quelle est la méthode principale en Java?
Qu'est-ce que l'assemblage Maven?
Qu'est-ce que `docker-compose up`?
Qu'est-ce qu'un constructeur
Qu'est-ce que vue cli
Qu'est-ce qu'une interface
Qu'est-ce que le moi de Ruby?
Qu'est-ce que le codage en dur?
Qu'est-ce qu'un flux
Qu'est-ce que l'attr_accessor de Ruby?
Qu'est-ce que le contrôle d'instance?
Qu'est-ce qu'un initialiseur?
Qu'est-ce que Spring Tools 4
Qu'est-ce qu'un opérateur?
Qu'est-ce que l'orientation objet?
Qu'est-ce que le @VisibleForTesting de Guava?