类型变量界定:
Uper Bound(上界):
Java泛型中,对于类型 T’ 是类型 T 的子类型的描述为:
< T' extends T >
<* 或用通配符形式 *>
< ? extends T >
注:此处extends 并不是一个动词-Java中继承;可以理解为描述性词汇,T’为T 的子类。
Scala中,引入操作符’<: ‘:
[ T' <: T ]
<* 或用通配符形式 *>
[ _ <: T ]
适用场景:泛型对象作为数据提供者(生产者)
def func[T <: Any] (lst: List[T]): List[T] = { lst.foreach(println);lst }
// 或
def func (lst: List[_ <: Any]): List[_ <: Any] = { lst.foreach(println);lst }
Lower Bound(下界):
Java泛型中,T是T’的父类的描述为:
< T super T' >
<* 或通配符形式 *>
< ? super T >
Scala中,引入操作符’:> ‘:
[ T >: T' ]
<* 或通配符形式 *>
[ _ >: T' ]
使用场景:泛型对象作为数据使用者(消费者)
def func[T >: String] (buffer: ListBuffer[T]): ListBuffer[T] = { buffer.append(",");buffer }
// 或
def func (buffer: ListBuffer[_ >: String]): ListBuffer[_ >: String] = { buffer.append(",");buffer }