import java.util.LinkedList;public class Test123<T extends Object> extends LinkedList<T> { private static final long serialVersionUID = 1L;
public boolean add(T string) { return (!contains(string)) && (super.add(string)); } public void test(){ add(new Object()); }
public static void main(){ Test123<Integer> test = new Test123<Integer>(); test.add(new Integer(2)); } } 谢谢你的回复! add(new Object());这样也编译通不过。
import java.util.LinkedList;public class Test123<T extends Object> extends LinkedList<T> { private static final long serialVersionUID = 1L;
public boolean add(T obj) { return (!contains(obj)) && (super.add(obj)); } public void test(){ add(new Object());//这里报错The method add(T) in the type Test123<T> is not applicable for the arguments (Object) }
public static void main(String[ ] args){ Test123<String> test = new Test123<String>(); test.add(new String("UUUU"));//这里不报错 } }
add(x);
不过感觉还是很奇怪,
搬个板凳坐等大神来解释吧good luck
比如有下面的类
A extends AA
如果一个方法需要一个<? extends AA>的参数
那么,直接写add(AA x){}就行了吧
good luck
private static final long serialVersionUID = 1L;
public boolean add(T string) {
return (!contains(string)) && (super.add(string));
} public void test(){
add(new Object());
}
public static void main(){
Test123<Integer> test = new Test123<Integer>();
test.add(new Integer(2));
}
}
谢谢你的回复!
add(new Object());这样也编译通不过。
private static final long serialVersionUID = 1L;
public boolean add(T obj) {
return (!contains(obj)) && (super.add(obj));
} public void test(){
add(new Object());//这里报错The method add(T) in the type Test123<T> is not applicable for the arguments (Object)
}
public static void main(String[ ] args){
Test123<String> test = new Test123<String>();
test.add(new String("UUUU"));//这里不报错
}
}
因为T的类型还无法确定,上面打错了。
因为T的类型还无法确定,上面打错了。
谢谢你的回复!
T的上界是Object,在编译的时候至少可以确定T是Object或者Object的子类,在test()里面加入一个Object类型的对象应该是符合逻辑的吧?
因为T的类型还无法确定,上面打错了。
谢谢你的回复!
T的上界是Object,在编译的时候至少可以确定T是Object或者Object的子类,在test()里面加入一个Object类型的对象应该是符合逻辑的吧?
我只想问你一个问题:
Integer i = new Object();
比如上面这行代码,Integer也是Object的子类。那么就可以把父类引用赋值给子类的引用了?
很明显编译不过。但是:
Integer i = (Integer)new Object();
这样没问题,但是你会得到一个转型异常。因为Object它不是一个Integer。
Test123<String> t = new Test123<>();
t.test();
t.add("abc");
现在T是String,你调用test的时候,就相当于把Object赋值给了String。但Object不是String。如果你还不能理解,那我也帮不到了。
看到这句的时候理解了!需要子类的地方不能赋值父类。多谢!
public boolean add(T obj) {
return (!contains(obj)) && (super.add(obj));
}}
再请教一下您,如果要实现上面的功能,应该如何修改?super.dd(obj)编译不通过。
因为T的类型还无法确定,上面打错了。
谢谢你的回复!
T的上界是Object,在编译的时候至少可以确定T是Object或者Object的子类,在test()里面加入一个Object类型的对象应该是符合逻辑的吧?
我只想问你一个问题:
Integer i = new Object();
比如上面这行代码,Integer也是Object的子类。那么就可以把父类引用赋值给子类的引用了?
很明显编译不过。但是:
Integer i = (Integer)new Object();
这样没问题,但是你会得到一个转型异常。因为Object它不是一个Integer。
Test123<String> t = new Test123<>();
t.test();
t.add("abc");
现在T是String,你调用test的时候,就相当于把Object赋值给了String。但Object不是String。如果你还不能理解,那我也帮不到了。
public class UsersList<T extends User> extends LinkedList<T>{
public boolean add(T obj) {
return (!contains(obj)) && (super.add(obj)); }
} 再请教一下您,如果要实现上面的功能,应该如何修改?super.dd(obj)编译不通过。
因为T的类型还无法确定,上面打错了。
谢谢你的回复!
T的上界是Object,在编译的时候至少可以确定T是Object或者Object的子类,在test()里面加入一个Object类型的对象应该是符合逻辑的吧?
我只想问你一个问题:
Integer i = new Object();
比如上面这行代码,Integer也是Object的子类。那么就可以把父类引用赋值给子类的引用了?
很明显编译不过。但是:
Integer i = (Integer)new Object();
这样没问题,但是你会得到一个转型异常。因为Object它不是一个Integer。
Test123<String> t = new Test123<>();
t.test();
t.add("abc");
现在T是String,你调用test的时候,就相当于把Object赋值给了String。但Object不是String。如果你还不能理解,那我也帮不到了。
public class UsersList<T extends User> extends LinkedList<T>{
public boolean add(T obj) {
return (!contains(obj)) && (super.add(obj)); }
} 再请教一下您,如果要实现上面的功能,应该如何修改?super.dd(obj)编译不通过。
编译器的错误是什么,JDK7下面是可以通过的。