2015-04-25 25 views
5

Genel bağlantılı bir liste için bir yineleyici oluşturmaya çalışılıyor. Ileti başlığı ile listeyi yineleme amacıyla bir 'geçerli' düğüm oluşturmaya çalıştığımda, uyumsuz bir tür hatası alıyorum. İşte relveant hatları Java Generics uyumsuz türler linkedlist yineleyiciler

public class LinkedList<T> implements Iterable<T> 
{ 
    private node<T> headsent; 
    private node<T> tailsent; 
    public DistanceEventList() 
    { 
     headsent = new node<T>(); 
     tailsent = new node<T>(); 
     headsent.setnext(tailsent); 
     tailsent.setprevious(headsent); 
    } 
    public node<T> getheadsent() 
    { 
     return headsent; 
    } 
    ... 
    public MyIterator<T> iterator() { 
     return new MyIterator<T>(); 
    } 
    public class MyIterator<T> implements Iterator<T> 
    { 
     private node<T> current = getheadsent(); 
     public T next() { 
      current = current.getnext(); 
      return current.getdata(); 
     } 
    private class node<T> { 
     private T data; 
     private node<T> next; 
     private node<T> previous;  
     ... 
     public node<T> getnext() 
     { 
      return next; 
     } 
    } 
} 

var Ve hata Ben T iki farklı türde sunduk, ama çok kesin bilmek jenerik ile deneyimli değilim gibi

LinkedList.java:65: error: incompatible types 
private node<T> current = getheadsent(); 
required: LinkedList<T#1>.node<T#2) 
found: LinkedList<T#1>.node<T#1) 

görünüyor üretti. Umarım yukarıdaki kod hata tanımlamak için birisi için yeterlidir (oldukça bağırsak). Teşekkürler!

cevap

5

Aynı ada sahip iki türünüz var.

İç sınıflar, dış sınıflarında bildirilen tür değişkenlerini paylaşır. Yani yeni tip deklarasyonu <T> gölgeleri dış bir

public class MyIterator<T> implements Iterator<T> 
//      ^^^ 

varken.

public class MyIterator implements Iterator<T> 
//     ^^^ 
+0

Ah Anlıyorum, benim IDE LinkedList olarak LinkedList listeleme neden de açıklıyor:

private node<T> current = getheadsent(); // ^^^^^^^ ^^^^^^^^^^^ // inner T outer T 

sadece beyanı kaldırabilirsiniz. Bu aynı zamanda özel sınıf düğümü {} özel kapat düğümü {}? – Matt

+0

* "Bu, özel sınıf düğümü {} öğesinin yalnızca özel kapatma düğümü olması gerektiği anlamına da geliyor mu?"} Evet veya "özel statik sınıf düğümü " aslında dış nesneyi göndermeniz gerekmiyorsa daha uygun olabilir düğümün içinden. – Radiodef

İlgili konular