Comment s'étend HashMap pour permettre à la Chaîne, la Chaîne types
J'ai besoin de créer une classe personnalisée qui s'étend java.util.LinkedHashMap et prend Chaîne de clé et de la Chaîne de valeur et a un no-arg constructeur qui pré-remplit cette carte avec les valeurs initiales.
Je suis bloqué à la première tâche - comment prolonger la LinkedHashMap de telle manière que, au lieu de générique arguments, il n'accepte que les?
J'ai essayé cette, (pas de travail)
import java.util.LinkedHashMap;
@SuppressWarnings("serial")
public class MyMenu<String, String> extends LinkedHashMap<String, String> {
public MyMenu(){
this.put("index.jsp", "Home Page");
}
}
Vous avez oublié de compléter votre dernière phrase. De toute façon, il ne sera pas question, sauf si vous en montrer un peu de code que vous pourriez avoir essayé.
L'extension de LinkedHashMap est presque certainement une mauvaise solution. Vous pouvez utiliser sa forme paramétrée ou de l'utilisation de la composition à la place de l'héritage.
Je ne voudrais pas avoir des problèmes avec la composition, mais alors j'aurais besoin d'une méthode de lecture pour getMap() de mon objet. Je voulais que mon objet à une table de hachage de sorte qu'il serait plus facile à utiliser à partir de jsp avec jstl
je suis d'accord avec @dystroy. nous utilisons une méthode utilitaire avec varargs pour initialiser une carte avec des valeurs initiales.
Vous ne serait pas nécessairement besoin d'un getter pour obtenir le
L'extension de LinkedHashMap est presque certainement une mauvaise solution. Vous pouvez utiliser sa forme paramétrée ou de l'utilisation de la composition à la place de l'héritage.
Je ne voudrais pas avoir des problèmes avec la composition, mais alors j'aurais besoin d'une méthode de lecture pour getMap() de mon objet. Je voulais que mon objet à une table de hachage de sorte qu'il serait plus facile à utiliser à partir de jsp avec jstl
je suis d'accord avec @dystroy. nous utilisons une méthode utilitaire avec varargs pour initialiser une carte avec des valeurs initiales.
Vous ne serait pas nécessairement besoin d'un getter pour obtenir le
Map
dans un modèle de composition. Vous pourriez mettre en œuvre les Map
interface et simplement déléguer à votre...délégué...OriginalL'auteur Wil | 2012-11-05
Vous devez vous connecter pour publier un commentaire.
Tous vous avez besoin est:
Supprimer
<String, String>
à partir de votre nom de la classe et il va fonctionner. Vous êtes à la création d'une classe qui étendLinkedHashMap<String, String>
de sorte que votre classe est déjà unMap
qui prendString
comme l'un des principaux etString
comme une valeur. Si vous voulez créer votre propre classe générique, alors vous devez faire comme ceci:Créer une classe, par exemple:
puis d'étendre cette classe:
Dans ce cas, vous devrez spécifier la clé et la valeur pour votre classe dans l'ordre pour
SomeMyMenu
classe utiliser la clé et la valeur queString
. Vous pouvez lire plus sur les génériques ici.Mais la façon la plus efficace de faire ce que vous voulez est de créer une classe finale et de déclarer la carte en elle comme ceci:
Et pour obtenir les valeurs de votre carte d'utilisation:
OriginalL'auteur Paulius Matulionis
Si votre lutte, comme vous le décrivez, est juste avec de la déclaration, alors je voudrais essayer quelque chose comme:
OriginalL'auteur Edwin Dalorzo
Vous pourriez faire quelque chose comme ci-dessous:
OriginalL'auteur Yogendra Singh
Essayer:
OriginalL'auteur Jean Logeart
Aussi longtemps que vous utilisez le JDK 1.5 ou version ultérieure, vous pouvez utiliser des génériques et de créer une LinkedHashMap qui stocke les clés de Chaîne et de la Chaîne des valeurs et de l'initialiser comme suit:
OriginalL'auteur Vikdor
Composition est une solution meilleure que l'héritage dans votre cas:
Mais pas "toujours"
OriginalL'auteur Amir Pashazadeh