[英]How to avoid generics warnings when using “raw types” as static field / return type?
[英]Java Generics: how handle raw type member variable and avoid warnings?
我有一個類,它具有一個稱為Argument<T>
的原始類型成員變量。 類是為了簡單的解決此類型的包,並通過構造一個通用的方式分配所有值,因為類型Argument
,並傳遞給構造函數的參數是不是在編譯時已知。
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;
因為當在構造函數中將通用參數分配給它時,我得到了錯誤。
您對此有何建議? 如何避免這些警告而又不引入錯誤? 如何處理不同/更好的通用類型成員變量?
在評論的幫助和一些來回的嘗試下,我自己得到了答案。
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...
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.