2014-04-28 77 views
0

我有一個類,有一個原始類型成員變量名爲Argument<T>。該類只是簡單地包裝這種類型,並且通過構造函數以通用方式分配所有值,因爲在編譯時傳遞給構造函數的參數的類型和Argument的類型是未知的。Java泛型:如何處理原始類型成員變量並避免警告?

public class ArgumentWrapper { 

    private Argument argument; 

    public ArgumentImplementation(Class<?> type, String name, 
      Object defaultValue, Set<?> allowedValues, 
      Comparable<?> lowerBound, Comparable<?> upperBound) { 
     argument = new Argument<>(type); 
     argument.setName(name); 
     argument.setDefaultValue(defaultValue); 
     argument.setAllowedValues(allowedValues); 
     argument.setLowerBound(lowerBound); 
     argument.setUpperBound(upperBound); 
    } 

    // some getters... 

} 

現在在我的代碼中,我得到了很多警告說

Argument is a raw type. References to generic type Argument<T> should be 
parameterized 

在成員和

Type safety: The method setDefaultValue(Object) belongs to the raw type Argument. 
References to generic type Argument<T> should be parameterized 

在構造函數的參數被分配給它。

我知道我不能將成員更改爲private Argument<?> argument;,因爲那時我在構造函數中將泛型參數分配給它時會出錯。

您對此有什麼建議?如何在不引入錯誤的情況下避免這些警告?我如何處理泛型類型成員變量different/better?

+1

你的ArgumentWrapper,因爲它包裝了一個泛型tyupe,也應該是一個泛型類型。 –

+0

聽起來合法。那麼,我將如何執行這個在我的情況?如果我只是簡單地將該類更改爲'public class ArgumentWrapper ',並將該成員變量更改爲'private Argument 參數;'我在構造函數中引入了錯誤。我不知道如何處理它們。我會接受答案,告訴我如何在我的例子中做到這一點。 – Terry

+0

如何向我們展示您的更新代碼,並顯示完整且準確的錯誤消息? –

回答

0

在評論的幫助和一些來回嘗試我自己得到了答案。

ArgumentWrapper類應該是通用的,並且泛型類型T應該在任何地方使用。

public class ArgumentWrapper<T> { 

    private Argument<T> argument; 

    public ArgumentImplementation(Class<T> type, String name, 
      T defaultValue, Set<T> allowedValues, 
      Comparable<T> lowerBound, Comparable<T> upperBound) { 
     argument = new Argument<T>(type); 
     argument.setName(name); 
     argument.setDefaultValue(defaultValue); 
     argument.setAllowedValues(allowedValues); 
     argument.setLowerBound(lowerBound); 
     argument.setUpperBound(upperBound); 
    } 

    // some getters... 

} 
相關問題