Scala - 使用方法创建用户类型

时间:2016-12-08 11:46:50

标签: scala generics types

我有一个泛型类,它接受一种类型,我有一个来自该类型的参数。问题是我需要使用此参数中的方法(在我的问题中,我需要使用方法getTimestamp)。 我不能拥有特征或抽象类,因为我知道,在某些时候,类型将是我无法修改的Java类。

我试过这样的事情:

type InputWithTimestamp = {def getTimestamp: Long}

class Foo[Input <: InputWithTimestamp](f : Input) {
   def printTimestamp = { println(f.getTimestamp) }
}

class Test(timestamp : Long) {
  def getTimestamp = timestamp
}

val t = new Test(1000)

val f = new Foo(t)
f.printTimestamp

它完全有效。

但正如我所说,在某些时候我需要使用java类作为类型。

这是我的问题:

即使java类定义了一个返回long的方法getTimestamp,我也有以下错误:

Error: inferred type arguments [MyJavaClass] do not conform to class Foo's type parameter bounds [Input <: InputWithTimestamp]

那么我该怎样做才能拥有一个定义此方法的泛型类型而无需修改我的java类?

1 个答案:

答案 0 :(得分:2)

我的问题是我没有使用括号来声明我的方法getTimestamp(因为如果你这样做,你会在IDEA中收到警告)。

但在这种情况下,我需要括号,否则java方法getTimestamp与scala方法不匹配

type InputWithTimestamp = {def getTimestamp: Long}

完美无缺。