Ví dụ duy nhất về chú thích bí danh loại tôi biết là trong Scaladoc. Dưới đây sau phần có liên quan:
object ScalaJPA {
type Id = javax.persistence.Id @beanGetter
}
import ScalaJPA.Id
class A {
@Id @BeanProperty val x = 0
}
này tương đương với văn bản @(javax.persistence.Id @beanGetter) @BeanProperty val x = 0
trong lớp A.
type
tờ khai chỉ có thể đối phó với các loại. Nói cách khác, bạn không thể cung cấp thông tin cá thể trong bí danh loại.
Một giải pháp thay thế là cố gắng mở rộng chú thích. Dưới đây tôi tạo ra một giả thuyết SpaceProperty
cho mục đích minh họa:
scala> import scala.annotation._; import scala.annotation.target._; import scala.reflect._;
import scala.annotation._
import scala.annotation.target._
import scala.reflect._
scala> class SpaceProperty(nullValue:String="1",otherValue:Int=1) extends Annotation with StaticAnnotation
scala> class SomeClass(@BeanProperty @(SpaceProperty @beanGetter)(nullValue="0") val x:Int)
defined class SomeClass
scala> class NullValueSpaceProperty extends SpaceProperty(nullValue="0")
defined class NullValueSpaceProperty
scala> class SomeClassAgain(@BeanProperty @(NullValueSpaceProperty @beanGetter) val x:Int)
defined class SomeClassAgain
Sử dụng các loại bí danh:
scala> type NVSP = NullValueSpaceProperty @beanGetter
defined type alias NVSP
scala> class SomeClassAgain2(@BeanProperty @NVSP val x:Int)defined class SomeClassAgain2
Có một vấn đề nhỏ với giải pháp này. Chú thích được xác định trong Scala không thể được giữ lại trong thời gian chạy. Vì vậy, nếu bạn cần sử dụng chú thích trong thời gian chạy, bạn có thể cần phải làm phần mở rộng trong Java. Tôi nói có thể vì tôi không chắc liệu giới hạn này đã được sửa đổi chưa.
Bạn đang sử dụng Scala với GigaSpaces? Wow! – Madoc
http://edmondo1984.squarespace.com/ – Edmondo1984