【问题标题】:Type declaration in ScalaScala 中的类型声明
【发布时间】:2012-11-12 03:30:15
【问题描述】:

我需要创建一个基本上只包含时间戳的列表的类。以下是TimeStamp 特征:

trait TimeStamp[T <: Comparable[T]] extends Comparable[TimeStamp[T]]
{
def getTimeStamp:T;
def compareTo(to:TimeStamp[T]) =this.getTimeStamp.compareTo(to.getTimeStamp) 
}

TimeStamp 具有可比性。并且getTimeStamp 返回类型也具有可比性。例如,它可以是 LongDate。上述特征的一个示例实现是:

class FileTimeStamp(file:File) extends TimeStamp[Date] 
{
  val time:Long = file.lastModified();
  val date:Date = new Date(time);
  override def getTimeStamp:Date = date;
  def getFile:File = file;
}

现在的问题是我想要一个没有参数的名为TimeList 的类。只能将TimeStamps添加到列表中。

class TimeList[T] extends ArrayList[TimeStamp[????]]

上面应该是我的????。理想情况下,我想要[T &lt;: Comparable[T]] 之类的东西。即 LongDate 或任何 TimeStamp 类型。

【问题讨论】:

  • T 上的TimeList 错了吗?
  • 这就是问题:) 基本上我的 TiemList 类声明应该如何。
  • 如果您将T 限制为Comparable[T] 您的代码可以正常工作。您不喜欢此解决方案的哪些方面?
  • 我需要提到类型。我希望用户写 val j:TimeList[FileTimeStamp] 而不是 val j:TimeList[Date]

标签: scala generics types


【解决方案1】:
class TimeList[T <: Comparable[T]] extends ArrayList[TimeStamp[T]]

编辑:根据您的评论,您可以这样做

class TimeList[T <: TimeStamp[_]] extends ArrayList[T]

但这种类型会更难使用。

【讨论】:

  • 那我需要提一下类型。我希望用户写 val j:TimeList[FileTimeStamp] 而不是 val j:TimeList[Date] 。使用上述解决方案,我将不得不将其声明为 TimeList[Date]
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多