泛型方法与可变参数
在泛型方法中,泛型也可以定义可变参数类型。
语法结构
public <泛型表示符号> void showMsg(泛型表示符号...args) {
}
示例:
public class MethodGeneric {
public <T> void method(T...args) {
for(T t:args) {
System.out.println(t);
}
}
}
public class Test4 {
public static void main(String[] args) {
MethodGeneric methodGeneric = new MethodGeneric();
String[] arr = new String[]{"a", "b", "c"};
Integer[] arr2 = new Integer[] {1, 2, 3};
methodGeneric.method(arr);
methodGeneric.method(arr2);
}
}
通配符和上下限定
无界通配符
“?”表示类型通配符,用于代替具体的类型。只能在“<>”中使用。可以解决当具体类型不确定的问题。
语法结构
public void showFlag(Generic<?> generic) {
}
示例:
public class ShowMsg {
public void showFlag(Generic<?> generic) {
System.out.println(generic.getFlag());
}
}
public class Test5 {
public static void main(String[] args) {
ShowMsg showMsg = new ShowMsg();
Generic<Integer> generic = new Generic<>();
generic.setFlag(20);
showMsg.showFlag(generic);
Generic<Number> generic1 = new Generic<Number>();
generic1.setFlag(50);
showMsg.showFlag(generic1);
Generic<String> generic2 = new Generic<> ();
generic2.setFlag("gugugu");
showMsg.showFlag(generic2);
}
}
通配符的上限限定
上限限定表示通配符的类型是T类以及T类的子类或者T接口以及T接口的子接口。该方法同样适用于与泛型的上限限定。
语法结构
public void showFlag(Generic<? extends Number> generic) {
}
示例:
public class ShowMsg {
public void showFlag(Generic<? extends Number> generic) {
System.out.println(generic.getFlag());
}
}
public class Test6 {
public static void main(String[] args) {
ShowMsg showMsg = new ShowMsg();
Generic<Integer> generic = new Generic<>();
generic.setFlag(20);
showMsg.showFlag(generic);
Generic<Number> generic1 = new Generic<Number>();
generic1.setFlag(50);
showMsg.showFlag(generic1);
}
}