java通配符怎么表示?
答:<?> 在<>中写?就表示通配符。
什么是java通配符?
通配符:通配任意一种泛型类型。它是在泛型的基础上存在的。
通配符的优点:是方法更加通用。
什么时候用通配符?在定义属性或者定义方法的时候。并不是在实例化属性的时候。
class Generics<T> { private T t; public T getT() { return t; } public void setT(T t) { this.t = t; } } public class Test { //使用泛型定义方法 private static <T> void print(Generics<T> generics){ System.out.println(generics.getT()); } //使用通配符定义的方法 private static void println(Generics<?> generics){ System.out.println(generics.getT()); } public static void main(String[] args){ /* Generics<?> gen;//定义的时候使用通配符 gen = new Generics<String>();//实例化的时候,必须明确类型,因为要告诉编译器,在内存中给对象分配地址了 */ Generics<String> gen = new Generics<String>(); gen.setT("abc"); Generics<Integer> gen2 = new Generics<Integer>(); gen2.setT(123); //测试2个方法 print(gen); println(gen2); }}
下面来说说通配符的上边界,下边界,无边界。
定义2各类:
public class Man implements Person { @Override public void eat() { } }
public interface Person { void eat(); }
来看2个方法:
public void per(List<? extends Person> list) {//上边界 for (Person person : list) { person.eat(); } }
public void man(){ List<? super Man> sList = null;//下边界 sList = new ArrayList<Person>(); }
在java泛型中,我们最常用的 ? 表示通配符,代表未知类型,无边界;
< ? extends Object>表示上边界限定通配符;
< ? super Object>表示下边界限定通配符。
欢迎关注我的微信公众号: