我有一个类,它有一个名为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;
,因为在构造函数中将通用参数分配给它时会出现错误。
您有什么建议来处理这个问题?如何在不引入错误的情况下避免这些警告?如何处理不同/更好的泛型类型成员变量?
答案 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...
}