Bir&; sonsuz quot&; yineleyici kötü tasarım " mı?
Bu genel olarak kötü uygulama Iterator
Bu uygulamaları sağlamak""; yani nereden hasNext()
(*) doğru geri dönün çağrıları? sonsuzdur
Genellikle derdim ki "Evet" çünkü telefon kodu olabilir kararsız davranır, ama aşağıda uygulama hasNext()
döndürür true sürece arayan kaldırır tüm elemanları Listesi yineleyici oldu başlatıldığını ile; yanifesih bir durum var. Bu Iterator
meşru bir kullanımı olduğunu düşünüyor musunuz? Bir sezgisel olmayan bir şeydi söyleyebiliriz sanırım halde sözleşmeyi ihlal etmiyor.
public class CyclicIterator<T> implements Iterator<T> {
private final List<T> l;
private Iterator<T> it;
public CyclicIterator<T>(List<T> l) {
this.l = l;
this.it = l.iterator();
}
public boolean hasNext() {
return !l.isEmpty();
}
public T next() {
T ret;
if (!hasNext()) {
throw new NoSuchElementException();
} else if (it.hasNext()) {
ret = it.next();
} else {
it = l.iterator();
ret = it.next();
}
return ret;
}
public void remove() {
it.remove();
}
}
(Bilgiçlik taslayan) DÜZENLEYİN
Bazı insanlar Iterator
bir Fibonacci dizisi gibi sınırlandırılmamış bir dizi değerleri oluşturmak için kullanılan olabilir nasıl yorumladı. Ancak, Iterator
Java belgelerine bir Yineleyici olduğunu belirtir:
Bir koleksiyon üzerinde bir yineleyici.
Şimdi iddia bu Fibonacci dizisi ise sonsuz bir koleksiyon ama Java isterim eşit koleksiyonu ile java.util.Collection
arabirimler sunar yöntemleri gibi size()
simgeleyen bir koleksiyon olmalı sınırlı. Bu nedenle, sınırsız bir dizi değerler jeneratör Iterator
kullanmak yasal mı?
CEVAP
Olduğunu düşünüyorumtamamen meşru- bir Iterator
sadece bir stream "" boşver. Neden akışı mutlaka sınırlı olmalıdır?
Diğer diller bol (örneğin Scala) sınırsız akışları için inşa kavramı var ve bu tekrarlanır. Örneğin, kullanarak scalaz
scala> val fibs = (0, 1).iterate[Stream](t2 => t2._2 -> (t2._1 t2._2)).map(_._1).iterator
fibs: Iterator[Int] = non-empty iterator
scala> fibs.take(10).mkString(", ") //first 10 fibonnacci numbers
res0: String = 0, 1, 1, 2, 3, 5, 8, 13, 21, 34
DÜZENLEME:Az prensibi açısından sürpriz, tamamen içeriğe bağlı bence. Örneğin, ben geri dönmek için bu yöntemi ne beklenir ki?
public Iterator<Integer> fibonacciSequence();
Neden &; ad std quot;" kötü olara...
Nasıl tamir: Handler " PageHandlerFact...
Nasıl çözüleceği "Hata: kötü Ende...
Neden belgedir.yazma " kabul;kötü ...
Handler "ExtensionlessUrlHandler-...