通用构造函数允许int类型

时间:2015-08-01 16:49:05

标签: java generics

我有以下设置:

class Variable<T> {

    protected T value;

    public Variable(T value) {
        this.value = value;
    }

    public T getValue() {
        return value;
    }
}

我想创建一个Integer类,扩展Variable我可以将int传递给Integer构造函数。这是我目前的Integer课程:

class Integer<T> extends Variable<T> {

    public Integer(T value) {
        super(value);
    }
}

现在我想要做的是创建一个新的Integer对象,如下所示:

Integer a = new Integer(5);

这可以正常工作,但我收到一条警告,告诉我应该添加一个注释来抑制a的原始类型。根据我对泛型的理解,我认为这样可以正常工作而不需要任何警告或抑制。如何更改我的代码,以便Integer可以采用int类型而不进行抑制?

3 个答案:

答案 0 :(得分:5)

Integer不应该是通用的,假设您的意思是代表Java Integer类型的变量

class Integer extends Variable<java.lang.Integer> {
    public Integer(java.lang.Integer value) {
        super(value);
    }
}

答案 1 :(得分:5)

你的Integer课程没有意义。如果是的话,你就可以创建像new Integer<String>()这样的东西,这真的很奇怪。

你宁愿需要这个:

class Integer extends Variable<java.lang.Integer> {

    public Integer(java.lang.Integer value) {
        super(value);
    }
}

答案 2 :(得分:3)

旁注:Integer是一个糟糕的名称选择 - 它会引起与内置java.lang.Integer的太多混淆。话虽如此,你不应该让你的Integer类通用 - 它是一个特定的用例:

class Integer extends Variable<java.lang.Integer> {
    public Integer(java.lang.Integer value) {
        super(value);
    }

    // rest of the class...