SORU
16 Temmuz 2009, PERŞEMBE


Java Scala eşdeğer.lang.Sınıf<T> Nesne

Soruyu bir örnekle daha iyi açıklanabilir

JPA bir EntityManager için Java, aşağıdaki(Hesap benim Varlık sınıfı) yapabilirim:

Account result = manager.find(Account.class, primaryKey);

Scala, Toy yük.:

val result = manager.find(Account.class, primaryKey)

Ama Scala Account.class kullanmaya çalıştığımda, böyle değil gibi görünüyor. Nasıl Scala Hesap sınıfı için java.lang.class nesne belirtebilir miyim?

CEVAP
16 Temmuz 2009, PERŞEMBE


Göre "The Scala Type System",

val c = new C
val clazz = c.getClass              // method from java.lang.Object
val clazz2 = classOf[C]             // Scala method: classOf[C] ~ C.class
val methods = clazz.getMethods      // method from java.lang.Class<T>

classOf[T] yöntemi Scala bir türü için çalışma zamanı gösterimi döner. Java ifadesi T.class benzer.
classOf[T] getClass türünün bir örneği aynı bilgileri almak için uygun olsa da hakkında bilgi almak istediğiniz bir tür varsa uygundur.

Ancak, classOf[T] getClass biraz farklı değerler, JVM üzerinde yazı silme etkisini yansıtan, getClass durumunda iade.

scala> classOf[C]
res0: java.lang.Class[C] = class C

scala> c.getClass
res1: java.lang.Class[_] = class C

Bu neden following will not work:

val xClass: Class[X] = new X().getClass //it returns Class[_], nor Class[X]

val integerClass: Class[Integer] = new Integer(5).getClass //similar error

ticket regarding the return type of getClass.

(James Moore bilet "şimdi", yani Kas. olduğunu bildiriyor 2011, iki yıl sonra düzeltildi.
, *2.9.1* 20 oluyor

scala> "foo".getClass 
       res0: java.lang.Class[_ <: java.lang.String] = class java.lang.String

)

2009 yılında geri:

O-cekti var olmak kullanışlı olursa Km idi tedavi etmek için geri gelen getClass() java.lang.Class[T] bi { val T : C } C gibi bir şey silme statik tip ifade eden getClass denir

Bir sınıf üzerinde incelemek istiyorum bana aşağıdaki gibi bir şeyler yapalım ama bir sınıf örneği gerekmez.
Ben de incelemek istiyorum sınıfları sınırlandırmak istiyor, Sınıf kullanıyorum[_ <: Deneme]. Ama bu Foo kullanarak Foo sınıfında geçen engelliyor beni.() getClass dökme olmadan.

Not: getClass, olası bir çözüm ile ilgili olabilir:

class NiceObject[T <: AnyRef](x : T) {
  def niceClass : Class[_ <: T] = x.getClass.asInstanceOf[Class[T]]
}

implicit def toNiceObject[T <: AnyRef](x : T) = new NiceObject(x)

scala> "Hello world".niceClass                                       
res11: java.lang.Class[_ <: java.lang.String] = class java.lang.String

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Caramella Girls

    Caramella Gi

    19 Mayıs 2008
  • Ralph Phillips

    Ralph Philli

    5 Aralık 2006
  • THELIFEOFPRICE

    THELIFEOFPRI

    16 Mart 2011