2010-10-05 24 views
1

J'essaie de créer une file d'attente FIFO remplie avec mon propre objet de classe.
Je trouve cet exemple, mais si je remplace < E> avec < PCB> il ne fonctionne pas:
Faire ma propre classe FIFO Queue pour mon propre objet de classe pour le remplir?

import java.util.LinkedList; 


public class SimpleQueue<E> { 

private LinkedList<E> list = new LinkedList<E>(); 


public void put(E o) { 
    list.addLast(o); 
    } 


    public E get() { 
    if (list.isEmpty()) { 
      return null; 
     } 
    return list.removeFirst(); 
    } 


    public Object[] getAll() { 
    Object[] res = new Object[list.size()]; 
    for (int i = 0; i < res.length; i++) { 
     res[i] = list.get(i); 
     } 
    list.clear(); 
    return res; 
} 



    public E peek() { 
     return list.getFirst(); 
     } 


    public boolean isEmpty() { 
    return list.isEmpty(); 
    } 


    public int size() { 
    return list.size(); 
    } 
    } 
+0

Generics devrait être "générale". Vouloir changer le nom de la variable de type en 'PCB' donne l'impression que vous avez un type spécifique en tête en tant que paramètre. Dans tous les cas, vous avez probablement créé un type lorsque vous avez effectué votre recherche et remplacement; il n'y a rien de syntaxiquement faux avec l'utilisation de "PCB", il semble juste moche. – erickson

+0

Comment remplacer «E» par «PCB»? – Starkey

+0

"Cela ne fonctionne pas". Qu'est-ce qui ne fonctionne pas? Ne compile-t-il pas? –

Répondre

1

E est un paramètre de type. En termes simples, vous pouvez le considérer comme un «modèle» qui peut être utilisé pour créer une file d'attente pouvant contenir des instances d'une classe particulière.

Vous pouvez créer une file d'attente de vos objets PCB comme suit:

SimpleQueue<PCB> queue = new SimpleQueue<PCB>(); 

Java Generics FAQs est une bonne ressource si vous voulez en savoir plus sur les génériques Java.

+0

J'ai essayé ça! Je l'ai dit dans la question réelle – Luron

+0

@Luron: vous avez dit "... si je remplace < E > par < PCB > ..." que j'ai pris pour signifier que vous avez réellement remplacé '' par '' dans la source Java pour 'SimpleQueue '. Si vous instanciez 'SimpleQueue' comme dans ma réponse, pourquoi cela ne fonctionne-t-il pas? Je l'ai essayé et cela semble fonctionner (un 'put' et' get' semblent fonctionner, mais il se peut que je manque quelque chose). Avez-vous une erreur de compilation ou une trace de pile? –

+0

no. comme dans le tapez – Luron

0

tutoriel générique Le soleil dit ce qui suit:

Nous vous recommandons d'utiliser lapidaire (caractère si possible) encore noms évocateurs pour le type formel paramètres. Il est préférable d'éviter 3 caractères de cas dans ces noms, rendant facile de distinguer les paramètres de type formel des classes ordinaires et des interfaces . De nombreux types de conteneurs utilisent E, pour l'élément, comme dans les exemples ci-dessus.

Donc, il ne peut pas être le problème que vous l'avez changé à PCB.

Mais si PCB est la seule classe dont vous voulez stocker des objets, vous n'avez pas besoin de créer une classe générique. Il suffit de retirer <PCB> de votre ligne de définition de classe et remplacer tous E « s avec PCB:

public class SimpleQueue 
{ 
    LinkedList<PCB> list = new LinkedList<PCB>(); 

    .... 

    public PCB peek() 
    { 
     return list.getFist(); 
    } 
} 
+0

J'ai dit que j'ai essayé ça. et ça n'a pas marché. – Luron

1
public class MyQueue{ 

    int arr[]=new int[10]; 
    int i=0; 
    int j=0; 
    public void inn(int a) 
    { 
     System.out.println("You hava entered :"+a); 
     arr[i]=a; 
     i=i+1; 
    } 
    public int out() 
    { 
     return arr[j++]; 

    } 
    public static void main(String args[]) 
    { 
     MyQueue q=new MyQueue(); 
     q.inn(4); 
     q.inn(3); 
     q.inn(46); 
     q.inn(44); 
     q.inn(43); 
     System.out.println(q.out()); 
     System.out.println(q.out()); 
     System.out.println(q.out()); 
     System.out.println(q.out()); 
    } 
}