user48956
user48956

Reputation: 15788

Does using scala's type declaration for clarity have and drawbacks?

For example, suppose we have:

object Types {
   type ObjectMap = collection.Map[String, Any]
}

class X {
  def toObjectMap(x:Any): ObjectMap = x.asInstanceOf[Types.ObjectMap] 
}

Does this have any additional runtime penalties compared to:

class X {
  def toObjectMap(x:Any): collection.Map[String, Any]= x.asInstanceOf[collection.Map[String, Any]] 
}

Upvotes: 0

Views: 94

Answers (2)

Seth Tisue
Seth Tisue

Reputation: 30453

Type aliases are just shorthand. The compiler expands the alias and from then on, proceeds precisely as if you had written the type out yourself. (As Som's answer shows, at least for your particular example.)

Upvotes: 0

som-snytt
som-snytt

Reputation: 39577

I wouldn't expect it to, but you know it's like, really easy to try it out.

scala> :javap -prv X

  public scala.collection.Map<java.lang.String, java.lang.Object> toObjectMap(java.lang.Object);
    flags: ACC_PUBLIC
    Code:
      stack=1, locals=2, args_size=2
         0: aload_1       
         1: checkcast     #9                  // class scala/collection/Map
         4: areturn       
      LocalVariableTable:
        Start  Length  Slot  Name   Signature
               0       5     0  this   L$line9/$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$X;
               0       5     1     x   Ljava/lang/Object;
      LineNumberTable:
        line 53: 0
    Signature: #75                          // (Ljava/lang/Object;)Lscala/collection/Map<Ljava/lang/String;Ljava/lang/Object;>;

  public scala.collection.Map<java.lang.String, java.lang.Object> toObjectMap2(java.lang.Object);
    flags: ACC_PUBLIC
    Code:
      stack=1, locals=2, args_size=2
         0: aload_1       
         1: checkcast     #9                  // class scala/collection/Map
         4: areturn       
      LocalVariableTable:
        Start  Length  Slot  Name   Signature
               0       5     0  this   L$line9/$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$X;
               0       5     1     x   Ljava/lang/Object;
      LineNumberTable:
        line 54: 0
    Signature: #75                          // (Ljava/lang/Object;)Lscala/collection/Map<Ljava/lang/String;Ljava/lang/Object;>;

Upvotes: 4

Related Questions