Générique Java connaissances de base et des questions d'entrevue liée à l'opération

. Pourquoi utiliser un générique (problèmes suivants)?
1): stocker tout type de données dans la collection, mais de type Object sont retirés, à ce moment une forte rotation.
2): ensemble d'éléments stockés Constraint il doit être le même type de données (le même type de données peuvent être comparées, telles que la classe TreeSet).
3): une classe pour encapsuler la position coordonnée du point de conception (point), la position coordonnée nécessaire pour soutenir le type de chaîne .Integer / Type Double.

? En second lieu , ce qui est générique
Generics (de GenericType), de Java5 a commencé à soutenir la nouvelle syntaxe:
1):. vaste type générique
2): Code type d'incertitude de modèle, qui appellent les sections du code, spécifiez le type qui est Qu'est - ce que.

Trois génériques:
Insérer ici l'image Description
les classes génériques: directement dans la classe / interface générique définie.
Utilisant générique:
le même type avant et après garantie.
Liste Liste nouvelle nouvelle = ArrayList (); // set stocker uniquement le type de liste de chaînes l'élément
parce que le même type d'avant et arrière, donc depuis le début syntaxe <> diamant générique de sortie java7.
Liste Liste = new new ArrayList <> ()
. relation d'héritage générique n'existe pas (erreur ci - dessous)
Liste Liste = new new ArrayList () // erreur
. Depuis lors, l'utilisation d'une collection devait utiliser les médicaments génériques pour limiter le type des éléments de la collection
décompiler, a trouvé: en fait générique du sucre syntaxique , le fond est toujours pas générique, mais toujours avec un tour solide.
Insérer ici l'image Description
quatre définitions et utiliser des méthodes génériques:
méthode générique:. dans les déclarations de méthodes génériques
en général, comme le type de retour générique personnalisé de la méthode est logique, mais dans ce cas doit être un générique paramètre réglage entrant dans.
Si aucun jeu générique de paramètres à ce type particulier, la méthode à ce moment est généralement conçu pour revenir à l' objet.
méthode exemple asList () de la classe Arrays outils
Insérer ici l'image Description
V. wildcards génériques et comprendre que les limites supérieure et inférieure sur la ligne :( )
wildcards génériques: Je ne sais pas quel type Lors de la réception, ce temps peut être utilisé pour indiquer générique inconnu ??.
Dans ce cas , reçoit uniquement les données, les données ne peuvent être stockées dans l'ensemble.
Insérer ici l'image Description
Génériques limites supérieure et inférieure: éléments de type doivent être utilisés pour définir la classe de X ou même sous - classe, X ou le même parent.

VI et effacement de conversion générique:
générique Effacer:
1): Après la compilation générique disparu (auto-effacement générique);
2): Lorsque le jeu avec générique attribué sans générique . ensemble, le cas générique est effacé (effacer manuellement) la
corruption tas:
seule méthode générique utilisée lorsque les deux l'utilisation de paramètres variables, puis facilement conduire à des problèmes de contamination pile.
comme: classe des tableaux dans asList méthodes: public static Liste asList (T ... a).
Insérer ici l'image Description
questions d'entrevue:
génériques 1.Java Quels sont les avantages de l' utilisation des génériques est ??
génériques est un mécanisme de type paramétrées. Il peut être applicable à différents types de code, de sorte que plus le code commun d'écriture, par exemple, l'ensemble du cadre.
Generics est un type de mécanisme de confirmation de la compilation. Il offre une sécurité de type compilation, et de veiller à ce type générique (généralement une collection générique) Utilisez uniquement le type correct de l'objet à éviter ClassCastException au moment de l' exécution.

2, comment le travail des génériques de Java? Qu'est - ce que l'effacement de type?
Travail générique dépend du compilateur pour compiler le code source lorsque la première vérification de type, puis tapez l' effacement et inséré à la place des paramètres de type apparaissent jeter les instructions pertinentes pour atteindre.
Le compilateur efface tous les types d'informations pertinentes au moment de la compilation, de sorte que tout type d'information pertinente n'existe pas lors de l' exécution. Par exemple, seule une liste Liste à type à l' exécution de représenter. Pourquoi devrait l' effacer? Ceci permet d' éviter le type d'expansion.

3. Qu'est - ce qu'un générique de caractères génériques et génériques limité non limité?
Types génériques limités ont été limités. Définir deux jokers, on est <? ** ** T étend> en veillant à ce type doit être lié à une sous - classe de type T ** ensemble, et l'autre est <? ** super * * T> en assurant la classe parente de type T doit être de type limite inférieure ** **. type générique doit être initialisé avec des types dans la limite, sinon il fera une erreur de compilation. D'autre part <?> Représente un caractère générique non limitatif, puisque <?> Peut être utilisé à la place de tout type.

4.List <? Prolonge T> et liste <? Super T> Quelle est la différence entre les deux? Des
exemples de ces deux déclarations de liste sont génériques limitée, List <? Prolonge T> vous pouvez accepter de inherits T type dans la liste tandis que la liste <? super T> Liste T peut accepter une classe parente composée. Par exemple Liste <? Prolonge Nombre> peut accepter ou la liste. Vous pouvez trouver plus d' informations dans ce paragraphe de connexion qui apparaît.

5. Comment écrire une méthode générique afin qu'il puisse accepter le paramètre générique et retourne un type générique?
Pour écrire une méthode générique est pas difficile, vous avez besoin d'utiliser des types génériques plutôt que des types primitifs, tels que l' utilisation de T, E ou K, V et un autre type d'espace réservé largement reconnu. Voir un exemple d'une méthode générique de cadre de collections Java. Dans le cas le plus simple, une méthode générique pourrait ressembler à ceci:
PUT public V (clé K, la valeur V) {
cache.put de retour (clé, valeur);
}

7. écrire un programme générique pour mettre en œuvre le cache LRU?
Pour les personnes qui aiment la programmation Java Ceci est l'équivalent d'un exercice. Donnez - vous un soupçon, cache LinkedHashMap LRU peut être utilisé pour mettre en œuvre une taille fixe, lorsque le cache LRU est plein, quand il sera supprimé les plus anciennes paires clé-valeur cache. LinkedHashMap fournit une méthode appelée removeEldestEntry (), la méthode est mise () et appel putAll () pour supprimer les paires les plus anciennes.

8. Vous pouvez lister Liste passé à la méthode qui accepte les paramètres font?
Pour tous ceux qui ne connaissent pas génériques, ce Java sujet des médicaments génériques semble confus, car à première vue cordes est un objet, si la liste doit être utilisée lorsque la liste nécessaire, mais ce n'est pas. Vraiment ne se traduira par une erreur de compilation. Si vous alors l'étape profonde, vous constaterez que Java est logique, car la liste peut stocker tout type d'objet, y compris chaîne, entier, etc., alors que la liste ne peut être utilisé pour stocker des chaînes.
ObjectList Liste;
Liste stringList;
ObjectList = StringList; // erreur de compilation types incompatibles

9.Array peut utiliser les médicaments génériques il?
Fait Array ne supporte pas les génériques, il est recommandé d'utiliser la liste au lieu de tableau, puisque la liste peut fournir le type de garanties de sécurité compilation et Array ne peut pas.

11, la distinction entre les types primitifs en Java et Liste?
La principale différence entre les paramètres de type et le type d' origine, le compilateur ne pas effectuer des contrôles de sécurité de type à le type de compilation de l'original, mais avec un paramètre de type sera vérifier, en utilisant le type d'objet, le compilateur peut informer le processus peut accepter tout type d'objet, comme une chaîne ou un entier . Cette question est d'examiner les points compréhension correcte du type générique de l'original. Le deuxième point de différence entre eux est que vous pouvez passer des arguments de type générique pour accepter la méthode de la liste de type brut, mais il ne peut pas passer d' une liste à la liste de méthode acceptée, car elle produira une erreur de compilation.

Quelle est la différence entre 12, Java liste <?> Et Liste sont?
Liste <?> Est -ce un type de liste est inconnue, mais en fait tout type de liste Liste. Vous pouvez mettre Liste, Liste attribué à la liste <?>, Ne peut pas être attribué à la liste Liste.
Liste listOfAnyType <?>;
Liste listOfObject = new new ArrayList ();
Liste listOfString = new new ArrayList ();
Liste listOfInteger = new new ArrayList ();

listOfAnyType = listOfString; // juridique
listOfAnyType = listOfInteger; // juridique
listOfObjectType = (Liste) listOfString; // erreur de compilation - en convertibles types

13, et la distinction entre les types primitifs Liste Liste.
La question comme « Quelle est la différence entre les paramètres type d' origine et le type. » Avec le type de paramètre est de type sécurisé , mais il est le type de garantie de sécurité par le compilateur, mais la liste de type brut est de type-safe. Vous ne pouvez pas mettre un autre type de type objet à l' extérieur String String dans une liste, et vous pouvez mettre tout type d'objet stocké dans la liste initiale. L' utilisation du type générique avec les paramètres que vous n'avez pas besoin d'être jeté, mais pour les types primitifs, vous aurez besoin des conversions de types explicites.
ListOfRawTypes ArrayList = new nouvelle liste ();
listOfRawTypes.add ( "ABC");
listOfRawTypes.add (123); // ceci permet au compilateur - fonctionnement anormal Shique
élément String = (String) listOfRawTypes.get ( 0); // conversion explicite de type requis
item = (String) listOfRawTypes.get (1 ); // jeter ClassCastException, ne peut pas être converti parce que le nombre entier chaîne

ListOfString ArrayList = new nouvelle liste ();
listOfString.add ( "ABCD");
listOfString.add (1234); // erreur de compilation, mieux que lancer une exception à l' exécution
= item listOfString.get (0); // pas explicite conversion de type - compilateur automatiquement convertis

Publié 99 articles originaux · a gagné les éloges 2 · Vues 2606

Je suppose que tu aimes

Origine blog.csdn.net/weixin_41588751/article/details/105299622
conseillé
Classement