SORU
30 AĞUSTOS 2008, CUMARTESİ


Nedir arasındaki farklar "genel" C türleri ve Java?

Java jenerik ve C templates ile çok güçlü bir programlama modeli sağlar. O zaman, C ve Java jenerik arasındaki fark nedir?

CEVAP
31 Ocak 2009, CUMARTESİ


Java JenerikkitleselC şablonlar için farklı.

C, temel şablonları temelde abartılı basit/makro ayarlanır (Not:bazı insanlar bir benzetme anlamak mümkün gibi görünüyor, çünkü şablon işleme makro) olduğunu söylemiyorum. Java temelde şeker Nesnelerin demirbaş döküm en aza indirmek için sözdizimi. Burada oldukça iyi introduction to C templates vs Java generics.

C bir şablon kullandığınızda, eğer #define makro kullandıysanız gibi temelde kodu başka bir kopyasını oluşturmak. bu noktada ayrıntılı için: Bu dizilerin boyutlarını belirleyen şablon tanımları int parametreleri gibi şeyler ve böyle yapmanızı sağlar.

Java bu şekilde çalışmaz. java.lang.Object tüm nesneler ölçüde bu yüzden, ön Jenerik, bu gibi bir kod yazmak istiyorum: Java

public class PhoneNumbers {
  private Map phoneNumbers = new HashMap();

  public String getPhoneNumber(String name) {
    return (String)phoneNumbers.get(name);
  }

  ...
}

tüm Java koleksiyon türleri onlara bir şey koyabilirsin böylece kendi temel türü olarak kullanılan bir Nesne. Java 5 ve etrafında rulo gibi şeyler yapabilirsiniz, böylece jenerik ekler:

public class PhoneNumbers {
  private Map<String, String> phoneNumbers = new HashMap<String, String>();

  public String getPhoneNumber(String name) {
    return phoneNumbers.get(name);
  }

  ...
}

Ve bu Java Jenerik: döküm nesneler için paketleri. Java Jenerik rafine değil çünkü. Tür silme kullanıyorlar. Bu karar, Java Jenerik birlikte geriye uyumluluk (Map<String, String> Map için çağrıldığında kullanılabilir) kırmak istemedikleri bir parça bu kadar geç geldiğim için yapıldı. Bu karşılaştırın .Net/C# yazın silinme değil eskiden olan yol için her türlü farklılıkları (örneğin kullanabilirsiniz ilkel türleri ve IEnumerable IEnumerable<T> ayı ilişki için birbirimizi).

Ve bir sınıf Java 5 jenerik bir derleyici ile derlenmiş kullanarak İLGİLENİYORUZ 1.4 üzerinde kullanılabilir (Java 5 gerektiren herhangi bir diğer özellikleri veya sınıfları kullanımı yok varsayarak ).

Bu yüzden Java syntactic sugar denir.

Ama jenerik yapmak için nasıl bu kararı (mükemmel) Java Generics FAQ birçok cevap vermek için ortaya çıkmıştır o derin etkileri o kadar ki, insanlar Java Jenerik hakkında birçok sorusu var.

C şablonlar Java Jenerik yok özellikleri vardır:

  • İlkel bir tür bağımsız değişkenleri kullanın.

Örneğin:

template<class T, int i>
class Matrix {
  int T[i][i];
  ...
}
  • Bir özelliği olan default type arguments, Java özledim ama bu geriye uyumluluk nedeni vardır;
  • C ilkel tür bağımsız değişkenleri kullanımı, Java değil; sağlar
  • Java argümanları sınırlayıcı sağlar.

Örneğin:

public class ObservableList<T extends List> {
  ...
}

Gerçekten farklı değişkenlerle şablon çağırmaları çok farklı olduğunu vurguladı gerekir. Hatta statik üyeleri paylaşmıyorlar. Java'da bu durum böyle değil.

Jenerik ile farklılıkları bir yana bırakırsak, bütünlüğü için, burada bir basic comparison of C and Java (another one).

Ve aynı zamanda Thinking in Java önerebilirim. C programcısı olarak nesneler gibi kavramların çok zaten parça yağsız bile olsa tanıtıcı bir metin için değerli olabilir çok ince farklar var ama ikinci doğa olacak.

Java öğrenme ne zaman öğreneceksiniz ne bir sürü tüm kütüphaneler (yaygın olarak kullanılan şeyler gibi Bahar içeren komple cam ve standart dışı geliyor, ne de bir standart). Java sözdizimi daha ayrıntılı daha C sözdizimi ve yok bir sürü C özellikleri (örneğin, operatör yükleme, çoklu kalıtım, yıkıcı mekanizması, vb.) ama bu değil kesinlikle bir alt ya da C.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • MADFINGER Games a.s.

    MADFINGER Ga

    21 NİSAN 2009
  • Numberphile

    Numberphile

    15 EYLÜL 2011
  • Trulia

    Trulia

    29 Kasım 2006