아래의 예시를 보면 LinkedList를 구현하였다. 하지만 ListNode[String]이라고 선언하면 ListNode[Object]를 사용할 수 없게 되는 상황이 나온다.
case class ListNode[T](h: T, t: ListNode[T]) {
def head: T = h
def tail: ListNode[T] = t
def prepend(elem: T): ListNode[T] =
ListNode(elem, this)
}
조금 더 규칙을 허술하게 하고 싶을때 ?? 사용하면 좋다. prepend 함수에 [U >: T] 라고 해주면
case class ListNode[+T](h: T, t: ListNode[T]) {
def head: T = h
def tail: ListNode[T] = t
def prepend[U >: T](elem: U): ListNode[U] =
ListNode(elem, this)
}
아래와 같이 유연하게?? 사용이 가능해진다.
object LowerBoundTest extends App {
val empty: ListNode[Null] = ListNode(null, null)
val strList: ListNode[String] = empty.prepend("hello")
.prepend("world")
val anyList: ListNode[Any] = strList.prepend(12345)
}
'Development > Programming' 카테고리의 다른 글
[Scala] Local Type Inference (0) | 2015.03.17 |
---|---|
[Scala] Explicitly Typed Self References (0) | 2015.03.16 |
[Scala] Upper Type Bounds (0) | 2015.03.11 |
[Scala] Traits (0) | 2015.03.07 |
[Scala] Polymorphic Methods (0) | 2015.03.05 |