2012-11-11 5 views
0

Je dois créer une classe qui est essentiellement une liste contenant uniquement des horodatages. Ci-dessous le trait TimeStamp:Déclaration de type dans Scala

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

TimeStamp est comparable. Et le type de retour getTimeStamp est également comparable. Il peut être Long ou Date par exemple. Un exemple d'implémentation de trait ci-dessus est:

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; 
} 

Maintenant la question est que je veux avoir une classe appelée TimeList sans paramètre. Il ne peut prendre que TimeStamps à ajouter dans la liste. Ce qui devrait être mon ???? ci-dessus. Idéalement, je voudrais quelque chose comme [T <: Comparable[T]]. c'est-à-dire Long ou Date ou quel que soit le type TimeStamp.

+0

le 'T' sur' TimeList' est faux? – sschaef

+0

C'est la question :) fondamentalement comment devrait être ma déclaration de classe de TiemList. – Jatin

+0

Si vous réduisez la limite 'T' à' Comparable [T] 'votre code fonctionne correctement. Qu'est-ce que vous n'aimez pas dans cette solution? – sschaef

Répondre

3
class TimeList[T <: Comparable[T]] extends ArrayList[TimeStamp[T]] 

EDIT: compte tenu de votre commentaire, vous pouvez le faire

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

mais ce type va être plus difficile à utiliser.

+0

Ensuite, je dois mentionner le type. Je voudrais que l'utilisateur écrive val j: TimeList [FileTimeStamp] plutôt que val j: TimeList [Date]. Avec la solution ci-dessus, je devrai la déclarer comme TimeList [Date] – Jatin