我有以下设置:
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
类型而不进行抑制?
答案 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...