2015-01-09 67 views
2

我收到以下錯誤Bound mismatch: The type FFTWTask is not a valid substitute for the bounded parameter <T extends AbsTask<T>> of the type AbsStage<T,U>綁定不匹配:類型是不是爲界參數

我代表一個抽象階段的有效替代品:

public abstract class AbsStage<T extends AbsTask<T>, U extends AbsTask<U>> { } 

凡AbsTask是:

public abstract class AbsTask <T> { } 

然後我創建了一個名爲FFTWTask的AbsTask:

public class FFTWTask extends AbsTask<Double>{ } 

最後,我創建一個名爲FFTWStage的AbsStage:

public class FFTWStage extends AbsStage<FFTWTask, FFTWTask>{ } // Error occurs here 

什麼我與我的瞭解泛型失蹤。我發現了大量功能相同的錯誤消息,但我似乎無法破譯它們。

下面是實現了誤差的簡單類:

public class Test { 
    public abstract class AbsTask <T> { } 
    public class FFTWTask extends AbsTask<Double>{ } 

    public abstract class AbsStage<T extends AbsTask<T>, U extends AbsTask<U>> { } 
    public class FFTWStage extends AbsStage<FFTWTask, FFTWTask>{ } // Error here <- 
} 

回答

2

如果AbsStage類型參數T必須擴展AbsTask<T>,然後FFTWTask必須按順序延伸AbsTask<FFTWTask>FFTWStage使用:

public class FFTWTask extends AbsTask<FFTWTask>{ } 
+0

這可以解決測試中的錯誤。現在,如何表示某個任務的某種數據類型,以便我可以讓任務在其中保存Double(或其他類型)。 – Jameshobbs 2015-01-09 21:11:50

+0

你可以從AbsStage中的'T'和'U'中刪除遞歸類型邊界('AbsStage ') – August 2015-01-09 21:18:04

+0

Yup解決了這個問題。非常感謝。嚴重泛型讓我有時感到非常頭痛...並感謝幫助我逐步完成它 – Jameshobbs 2015-01-09 21:20:44