L'extension de liste de tableaux et de Créer de nouvelles méthodes
Je vais avoir un peu de problème pour saisir quelque chose - j'ai peut-être aller sur ce complètement faux.
Je suis en train de créer une classe qui extends ArrayList mais a plusieurs méthodes qui augmentent la fonctionnalité (au moins pour le programme, je suis en train d'élaborer.)
L'une des méthodes est un findById(int id), qui recherche chaque objet ArrayList pour un id particulier de match. Jusqu'à présent, ça fonctionne, mais il ne me laisse pas faire for (Item i : this) { i.getId(); }
Je ne comprends pas pourquoi?
Code complet:
public class CustomArrayList<Item> extends ArrayList<Item> {
//declare singleton instance
protected static CustomArrayList instance;
//private constructor
private CustomArrayList(){
//do nothing
}
//get instance of class - singleton
public static CustomArrayList getInstance(){
if (instance == null){
instance = new CustomArrayList();
}
return instance;
}
public Item findById(int id){
Item item = null;
for (Item i : this) {
if (i.getId() == id) {
//something
}
}
return item;
}
public void printList(){
String print = "";
for (Item i : this) {
print += i.toString() + "\n";
}
System.out.println(print);
}
}
OriginalL'auteur Cody | 2011-06-29
Vous devez vous connecter pour publier un commentaire.
Changement
à
Je soupçonne
Item
est le nom de la classe que vous souhaitez stocker dans la liste. En ajoutant<Item>
aprèsCustomArrayList
vous êtes l'introduction d'un paramètre de type qui masque cette classe.Avec la
<Item>
paramètre, votre code est égal àqui de toute évidence ne fonctionne pas toujours, comme
T
peut se référer à n'importe quel type.C'est probablement la syntaxe correcte pour votre scénario. Mise à jour de la réponse à expliquer pourquoi.
Merci!!!! Qui l'explique très bien.
Pas de problème. Vous êtes les bienvenus.
Pour ajouter à cela, si vous voulez soutenir différents types d'éléments communs super type
Item
, utilisezpublic class ItemArrayList<T extends Item> extends ArrayList<T> { ... }
.OriginalL'auteur aioobe
Qu'est-ce que
getId()
? On peut supposer que c'est une méthode dans certains classe, mais nous ne savons pas qui classe.Si vous avez réellement obtenu une classe appelée
Item
avec ungetId()
méthode, ce qui est une liste de, vous avez simplement besoin d'arrêter votre classe d'être générique. Ainsi, au lieu de cela:vous voulez:
Actuellement au sein de votre classe,
Item
ne fait pas référence à une classe appelée Élément, il se réfère à un paramètre de type appeléItem
.Maintenant personnellement:
ArrayList<>
sauf si je devais vraiment, préférant la composition au cours de l'héritageLa meilleure façon de créer un singleton dans Java 1.5+ est d'utiliser un Enum. Voir par exemple cette question: stackoverflow.com/questions/70689/...
OriginalL'auteur Jon Skeet