SORU
25 ŞUBAT 2010, PERŞEMBE


Ne Herhangi arasındaki ilişkiler, AnyVal, AnyRef ve nasıl Java kod kullanıldığında harita mı Nesne mi?

Ben genelde derler kadar her kombinasyonu deneyerek sonunda. Biri nerede kullanmalıyım ne açıklayabilir?

CEVAP
25 ŞUBAT 2010, PERŞEMBE


Bir konuda* answer *27 ben katılmıyorum. Sınıflar Any, AnyRef ve AnyValsınıflar. Ama JVM içsel kısıtlamalar nedeniyle Java sınıfları olarak görünür değiller.

Bu her şeyin içinde bir Java nesnesi olduğu gerçeği ortaya çıkar. Nesnelerin yanı sıra, temel öğeler vardır. Java tüm nesneler ilkel bir çenesi vardır ama java.lang.Object ve, halen soyundan*bir programcı tarafından genişletilebilir. İlkel de not "" değil, yöntemleri. operatörler

Öte yandan Scala, her şeyibir nesne, bütün nesneler bir sınıfa ait ve yöntemler aracılığıyla etkileşim. JVM bayt kodu oluşturulan bu yansıtmıyor, ama Java bayt kodu onları yok olsa bile jenerik var, sadece onları herhangi bir daha az yapmaz.

Yani, Scala, bütün nesneler Java nesneleri ne düşündüğü ve Java ilkel insanların ne düşündüğü de içeren Any ve soyundan. Böyle bir birleşme yoktur çünkü Java eşdeğeri yok.

Java ilkel olarak kabul edilen her şey Scala AnyVal soyundan. Scala kadar 2.10.0, AnyVal mühürlendi ve programcılar uzatmak için koyamadık. Üzerinde Scala ile ne olacağını görmek ilginç olacak .Birlikte çalışabilirlik yalnız Scala en az kullanıcı tanımlı tanıması için çağrıda beri Net, "ilkel".

Ayrıca Any genişletme java.lang.Object (herhangi bir oranda JVM) eşdeğerdir AnyRef,.

Kadar 2.9 Km.x, bir kullanıcı Any AnyVal, ne de onları referans Java, ama orada uzatabiliredildidiğer Scala için koymuş olabilirler kullanır. Özellikle yazın imza:

def f(x: AnyVal) = println(x)
def g(x: AnyRef) = println(x)
def h(x: Any) = println(x)

Her ne anlama geldiğini sınıf hiyerarşisinden açık olmalı. f h otomatik kutu olacak, ama g unutmayın, ancak,. Bu biraz tersi ne, Java mı, o f h olamaz belirtilen ve g (tanımlı java.lang.Object) neden otomatik boks.

Scala 2.10.0, ama ile başlayan kullanıcı AnyVal veya aşağıdaki semantiği ile* *22, uzatabilirsiniz:

  • Eğer bir sınıfı AnyVal, uzanıyorsa hiçbir örnek, belirli koşullar altında öbek üzerinde oluşturulur. Bu araçları alanlar bu sınıf (2.10.0 sadece bir tek alanda yasak olsun bu değişecek kalır görünmek) kalacak yığında olup olmadıklarını ve ilkel veya Kaynaklar diğer nesneler. Bu örnekleme maliyeti olmadan uzatma yöntemleri sağlar.

  • Eğer bir özellik uzanıyorsa Any AnyVal uzatmak AnyRef ve sınıfları uzatmak her iki sınıf da kullanılabilir.

PS: kendi görüşüm, Java C takip etmek olasıdır# "yapı" ilkel ve belki typedefs, onları başvurmadan iyi bir performans ile gerçekleştirmek zor olmadan. olarak paralellik sağlayan

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • LimeFire

    LimeFire

    2 ŞUBAT 2012
  • superflyy88

    superflyy88

    8 ŞUBAT 2009
  • TROPFEST

    TROPFEST

    27 Mart 2007