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

  • Jonathan Morrison

    Jonathan Mor

    24 Mart 2010
  • TVNorge

    TVNorge

    5 EKİM 2006
  • FusioNGamiing

    FusioNGamiin

    10 Temmuz 2007