Nesne

2010-08-28 24 views
5

'dan başka bir şey döndürmek için Java'nın liste yineleyicisini alın Java kullanıyorum.Nesne

"Subject" adlı özel bir nesne için zaten bir sınıfım var.

Yalnızca bir Bağlantılı Konu Nesnesi listesi içeren başka bir sınıfa sahibim. (deneklerList)

Konu Listesinde Bağlantılılar Listesi'nde belirli bir dizine döndürülmesi gereken konulardaki ("getSubject()") yöntemlerden birini yazdım. Bunu yapmak için bir ListIterator kullandım. LinkedList'te belirli bir dizinde bir ListIterator oluşturur ve .next() yöntemini kullanırdım. Ancak, bir ListIterator'daki .next() yöntemi yalnızca bir Subject nesnesini döndürmek istesem bile bir java.lang.Object döndürür.

Konu Nesnesini döndürmek için ListIterator.next() yöntemini nasıl alabilirim? Bir Konu için downcasting denedim

ama bu başarısız görünüyor ve bir yere mahzun değil ilgisiz nesneleri can okudum.

Bu benim subjectsList sınıftır: Söz konusu

import java.util.*; 
public class subjectsList 
{ 
    //my LinkedList of Subject objects and a ListIterator 
    private LinkedList<Subject> l; 
    private ListIterator itr; 

    //constructor that simply creates a new empty LinkedList 
    public subjectsList() 
    { 
     l = new LinkedList(); 
    } 

    //Method to return the Subject object at a specific index in the LinkedList 
    public Subject getSubject(byte index) 
    { 
     itr = l.listIterator(index); 
     return itr.next(); 
    } 

    //Method to add a new Subject object to the LinkedList 
    public void addSubject(String nameInput, byte levelInput) 
    { 
     l.addLast(new Subject(nameInput, levelInput)); 
    } 

    //Method to remove the Subject object at a specific index in the LinkedList 
    public void removeSubject(byte index) 
    { 
     itr = l.listIterator(index); 
     itr.next(); 
     itr.remove(); 
    } 
} 

yöntemi "getSubject()" yöntemidir. Sadece saklar liste olarak dönerken

l = new LinkedList<Subject>(); 

Ayrıca Konu onu at olabilir: yapıcı şöyle

private ListIterator<Subject> itr; 

Ayrıca LinkedList nesnesi oluşturmak:

+0

içine senin LinkedList örneğinin değiştirmek düşündürmektedir büyük harf. Bu da diğer kişilerin kodunuzu okumasını kolaylaştırır. – extraneon

+0

Bunu işaretlediğiniz için teşekkürler. – Joshua

+0

Neden bu 'ListIterator''a ihtiyacınız var? List.get (index) 've' List.remove (index) 'ile ilgili sorun nedir? – whiskeysierra

cevap

5

Sen olarak yineleyici beyan etmek gerek Özne nesne. Ama daha önce söylendiği gibi yineleyici tanımlamak daha iyi olurdu.

public Subject getSubject(byte index) 
{ 
    itr = l.listIterator(index); 
    return (Subject)itr.next(); 
} 

Sorununuz dışında kodunuzda adlandırma kuralı sorununu görüyorum. Onu takip etmek ve bir habbit yapmak daha iyidir.

NOT: Eclipse IDE'deki örneğinizi denedikten sonra cevabımda değişiklikler yaptım. IDE'yi kullanmanızı öneririm, çünkü bu tür şeyler hakkında sizi uyarır.

+0

Bunu işaretlediğiniz için teşekkürler ... Adlandırma kurallarının bu kadar önemli olduğunu bilmiyordum>. < Artık sınıf adı değişti. – Joshua

4

Jenerikliği ListIterator ile kullanabilirsiniz.

private ListIterator<Subject> itr; 

Şimdi itr.next() döndürülen konuları.

Kaynaklar:

PS: Ben bunu bir sınıf isimleri başlatmak için kongre olan java olarak l = new LinkedList<Subject>();

+0

Ayrıca, bir çok Java derleyicisinin, "özel ListIterator itr;" için ham türleri kullanma konusunda bir uyarı üreteceğini de belirtmek gerekir. –

+0

Oh, yapıcıda 'u unuttu ... Teşekkürler! – Joshua