Java Generics:如何处理原始类型成员变量并避免警告?

时间:2014-04-28 08:45:19

标签: java generics 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;,因为在构造函数中将通用参数分配给它时会出现错误。

您有什么建议来处理这个问题?如何在不引入错误的情况下避免这些警告?如何处理不同/更好的泛型类型成员变量?

1 个答案:

答案 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...

}