2012-11-11 9 views
0

기본적으로 타임 스탬프 만 포함하는 클래스 인 클래스를 만들어야합니다.스칼라에서 타입 선언

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

TimeStamp는 비교할 수 : 아래 TimeStamp 특징이다. 그리고 getTimeStamp 반환 유형도 비교할 수 있습니다. 예를 들어 Long 또는 Date 일 수 있습니다. 위의 특성의 구현 예는 다음과 같습니다

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 <: Comparable[T]]과 같은 것을 원할 것입니다. 즉 Long 또는 Date 또는 TimeStamp 유형이 무엇이든간에

+0

'TimeList'의 'T'가 잘못 되었나요? – sschaef

+0

그게 질문입니다 :) 기본적으로 TiemList의 클래스 선언이 어떻게되어야합니다. – Jatin

+0

'T'를'Comparable [T]'로 낮추면 코드가 잘 동작합니다. 이 솔루션에 대해 싫어하는 점은 무엇입니까? – sschaef

답변

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

편집 : 귀하의 코멘트를 주어, 당신은

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

을 할 수 있지만,이 유형은 사용하기 어렵게 될 것입니다.

+0

그런 다음 유형을 언급해야합니다. 사용자가 val j : TimeList [Date]가 아닌 val j : TimeList [FileTimeStamp]를 쓰길 원합니다. 위의 솔루션을 사용하면 TimeList [Date]로 선언해야합니다. – Jatin

관련 문제