2014-07-15 21 views
2

我有一個類:如何在Java中的複雜類型上添加參數?

public class Range<T extends Comparable<? super T>> { 
    private T start; 
    private T end; 

在另一類,我有:

public void validate(Object target, Errors errors) { 
    Range range=(Range)target;//Eclipse complains about unparamterized type 
    if (range.getStart().compareTo(range.getEnd())>0){ //This gives an error if I do Range<?> 

現在,Eclipse中給出了關於範圍是原始類型的警告。如果我用(Range<?>)替換它,那麼我得到一個錯誤,大概是因爲它使它不知道類型上的參數化。如果我做<? extends Comparable>,我仍然會收到警告,因爲我沒有參數化Comparable。有沒有一種好方法來擺脫警告?

我應該做一個@SuppressWarnings嗎?

+0

你不應該在實例化中指定實際類型? –

+5

爲什麼不驗證(範圍目標,錯誤錯誤)'? – Thomas

+0

@CharlesWood你應該這樣做,但沒有實例只是一個演員。 – Thomas

回答

2

您可以使用(Range<? extends Comparable<Object>>)target,但仍然會有未選中的演員陣容,您需要使用@SuppressWarnings ("unchecked")進行抑制。

所以,如果你可以改變方法簽名使用Range<T>而不是Object我會那樣做。

2

這種變異沒有給出警告(雖然我不知道爲什麼編譯器甚至需要這種暗示,因爲它可以/應該知道,通過對範圍的定義):

public <T extends Comparable<? super T>> void validate (Range<T> range, Errors errors) { 
    if (range.getStart().compareTo(range.getEnd()) > 0) { 
相關問題