如果方法中需要应用同一个对象的两种形式,那么我们可以使用通配符来区别
<C> void differ(Generic<? extends C> first, Generic<C> Second) {
/* 使用了通配符来规定上限的语法 */
}
菱形语法
public static void main(String[] args){
new Gents("直接调用构造器");
//new <Integer>Gents("调用构造器");因为规定是Integer类型所以报错
}
class Gents{
<T>Gents(T t){
System.out.println(t);
}
}
菱形语法的作用是让这种错误在编译的时候就报错
使用起来也很简单,在构造器的前面加
public static void main(String[] args){
Gents<String> gents = new Gents<>(123);//隐式指定泛型构造器是Integer类型,Gents类是String类型
Gents<String> gents = new Gents<String>("显式指定泛型构造器是String类型");
Gents<String gents = new <Integer>Gents<String>(123)//显示指定Integer类型
Gents<String> gents = new <Integer>Gents<>(123)//这种情况会报错
}
class Gents<E>{
<T>Gents(T t){
System.out.println(t);
}
}