SORU
20 Kasım 2008, PERŞEMBE


Koleksiyonları.() emptyList döndürür Listesi<Object>?

Bazı sorunlar genel tür parametreleri çıkarım için Java kuralı gezinerek geçiriyorum. Düşünün listesi isteğe bağlı bir parametre olan şu sınıf:

import java.util.Collections;
import java.util.List;

public class Person {
  private String name;
  private List<String> nicknames;

  public Person(String name) {
    this(name,Collections.emptyList());
  }

  public Person(String name,List<String> nicknames) {
    this.name = name;
    this.nicknames = nicknames;
  }
}

Java derleyicisi aşağıdaki hata verir:

Person.java:9: The constructor Person(String, List<Object>) is undefined

Ama Collections.emptyList() 12**, List<Object> yazın döndürür. Gölgesi ekleyerek yardımcı olmuyor

public Person(String name) {
  this(name,(List<String>)Collections.emptyList());
}

verir

Person.java:9: inconvertible types

EMPTY_LIST yerine emptyList()

public Person(String name) {
  this(name,Collections.EMPTY_LIST);
}

verir

Person.java:9: warning: [unchecked] unchecked conversion

Aşağıdaki değişikliği gitmek hata yapar ise:

public Person(String name) {
  this.name = name;
  this.nicknames = Collections.emptyList();
}

Herkes tür denetleme karşı işte gidiyorum kural, ve en iyi yolu, bir çözüm için ne açıklayabilir? Bu örnekte, son kod örneği yeterli, ama daha büyük sınıflar, "" desen olmadan kodu çoğaltma. isteğe bağlı parametre bu aşağıdaki yöntem yazmak istiyorum.

Ekstra kredi için: emptyList() karşı EMPTY_LIST kullanmak için uygun mu?

CEVAP
20 Kasım 2008, PERŞEMBE


Karşılaştığınız sorunu yöntemi emptyList() List<T> döner olsa da bu tür sağlamadın, List<Object> döndürmek için varsayılanları. Beklendiği gibi, bu tür parametresi Tedarik ve kodunuzu davranır, bu gibi olabilir:

public Person(String name) {
  this(name,Collections.<String>emptyList());
}

Şimdi düz ödev yaparken, derleyici için genel tür parametreleri anlamaya olabilir. Tür kesmesi deniyor. Eğer bunu yaparsan, örneğin:

public Person(String name) {
  List<String> emptyList = Collections.emptyList();
  this(name, emptyList);
}

sonra emptyList() çağrı düzgün List<String> dönecekti.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • MrChiCity3

    MrChiCity3

    14 NİSAN 2008
  • Music EuroDance 2

    Music EuroDa

    12 Mayıs 2011
  • TheTwistedFrequency

    TheTwistedFr

    26 NİSAN 2010