通配符
1.使用通配符的目的:可以接收所有的泛型类型,但是又不能够让用户随意修改。这种情况就需要使用通配符"?"来处理。
注意:
a.通配符主要用在方法的参数类型上。
b.用“?”–来表示通配符,可以接受任意类型参数的类型。
c.此时使用通配符"?"描述的是它可以接收任意类型,但是由于不确 型,所 以无法修改对象的属性值。
2.通配符的基本使用:
public class TestDemo {
public static void main(String[] args) {
Message<Integer> message = new Message() ;
message.setMessage(55);
fun(message);
}
// 此时使用通配符"?"描述的是它可以接收任意类型,但是由于不确定类型,所以无法修改
public static void fun(Message<?> temp){
//temp.setMessage(100); 无法修改!
System.out.println(temp.getMessage());
}
}
3.上限设置:—可以用在泛型类中也可以中在通配符中。
a.设置上限的形式:
泛型类中设置上限: T extends 类名
通配符设置上限: ?extends 类名
class Message<T extends Number> {
// 设置泛型上限
private T message ;
public T getMessage() {
return message;
}
public void setMessage(T message) {
this.message = message; }
}
public class TestDemo { public static void main(String[] args) {
Message<Integer> message = new Message() ;
message.setMessage(55);
fun(message);
}
// 此时使用通配符"?"描述的是它可以接收任意类型,但是由于不确定类型,所以无法修改 public static void fun(Message<? extends Number> temp){
//temp.setMessage(100); 仍然无法修改!
System.out.println(temp.getMessage());
}
}
b.设置上限的作用:
eg:? extends Number,表示只能够设置Number或其子类,例如:Integer,Double等;
4.下限设置:不可以用在泛型类中来设置下限,可以用在通配符中。
a.设置下限的形式
通配符设置下限: ?extends 类
public static void fun(Message<? super String> temp){
// 此时可以修改!! **但是主要修改的数据类型为String类或者子类类型**
temp.setMessage("bit!");
System.out.println(temp.getMessage());
}
b.设置下限的作用 :
eg:? super String,表示只能够设置String及其父类Object。