Reputation: 15788
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
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
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