【发布时间】:2017-03-15 17:57:44
【问题描述】:
两个问题
问题 1 带类型参数的类有什么用
我可以理解的用处
trait SomeTrait[T]
我正在努力理解什么可能是类似的用例
class SomeClass[A](a:A) {...}
当我们将已知类型的参数传递给函数或类时,我们知道允许对该参数进行哪些操作。所以如果我有一个如下的类,我知道由于参数是Int类型,我可以对参数'a'执行'+'
scala> class IntTest(a:Int) {
| def plusandPrintInt = {println(a+1)} //as 'a' is Int, we can do +
| }
defined class IntTest
scala> val i = new IntTest(1).plusandPrintInt
2
i: Unit = ()
但是当我创建一个接受类型参数 [A] 的类时,该参数可以是任何类型。因此我不知道可以对传递的参数进行什么操作
scala> class TypeClass [A](a:A) {
| // what possibly can be done on A without knowing what A is?
| }
defined class TypeClass
Traits 是不同的,因为我们没有在 trait 中实现函数,而是让其他类来实现。扩展一个接受Type参数的Trait时,一般通过指定实参类型进行扩展。因此,我们可以调用参数的具体操作,因为我们知道参数的类型是什么
scala> trait TraitClass [T] {
| def whatever (t:T) // I am not bothered as I do not need to implement this function
| }
defined trait TraitClass
scala> class extendTraitClass extends TraitClass[Int] {
| def whatever(t:Int) {println(t+1)} //I know that t is Int so I can use +
| }
defined class extendTraitClass
scala> (new extendTraitClass).whatever(1)
2
似乎对“a”唯一可用的操作如下
scala> def someFunction[A](a:A) {
| a. //double tabbed to get this list
!= + == ensuring formatted hashCode toString
## -> asInstanceOf equals getClass isInstanceOf ?
问题 2 type class 和 type trait 一样吗?
【问题讨论】: