格式:<参数类型>
本质是参数化类型
好处:自动类型转换;提前显示异常
4.1 概述和好处
package demo10Generic;
import javafx.print.Collation;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class Demo01 {
public static void main(String[] args) {
Collection<String> c=new ArrayList<String>();
c.add("hello");
c.add("world");
c.add("java");
//c.add(9527);
Iterator<String> it = c.iterator();
for (int i = 0; i < c.size(); i++) {
if(it.hasNext()){
String s = it.next();
System.out.println(s);
}
}
}
}
4.2 泛型的定义和使用
package demo10Generic;
/*
泛型类的定义和使用
*/
public class Demo02GenericClass {
public static void main(String[] args) {
Student stu=new Student();
stu.setName("阿德江");
System.out.println(stu.getName());
Teacher te=new Teacher();
te.setAge(11);
System.out.println(te.getAge());
Generic<String> s1=new Generic<>();
s1.setT("曾凡日");
System.out.println(s1.getT());
Generic<Integer> s2=new Generic<>();
s2.setT(23);
System.out.println(s2.getT());
}
}
package demo10Generic;
public class Generic<T> {
private T t;
public T getT() {
return t;
}
public void setT(T t) {
this.t = t;
}
}
4.3 泛型方法
package demo10Generic;
public class Demo03GenericMethod {
public static void main(String[] args) {
/*Generic2 s1=new Generic2();
s1.show("霍元甲");
s1.show(34);
s1.show(true);*/
//泛型方法改进
Generic2 s=new Generic2();
s.show("陈真");
s.show(true);
s.show(23);
s.show(12.22);
}
}
/*
陈真
true
23
12.22
*/
package demo10Generic;
public class Generic2 {
/*
public void show(String s){
System.out.println(s);
}
public void show(Integer s){
System.out.println(s);
}
public void show(boolean s){
System.out.println(s);
}*/
//泛型方法改进
public <T> void show(T t){
System.out.println(t);
}
}
4.4 泛型接口的定义和使用
package demo10Generic;
public class Demo04GenericImpl {
public static void main(String[] args) {
Generic3Impl<String> g3=new Generic3Impl<>();
g3.show("郭德纲");
g3.show("曹云金");
Generic3Impl<Integer> ge=new Generic3Impl<>();
ge.show(33);
}
}
/*
郭德纲
曹云金
33
*/
接口:
package demo10Generic;
/*
泛型接口的定义格式:
修饰符 interface 接口名称<T>
*/
public interface Generic3<T> {
void show(T t);
}
实现类:
package demo10Generic;
public class Generic3Impl<T> implements Generic3<T> {
@Override
public void show(T t) {
System.out.println(t);
}
}
4.5 类型通配符
package demo10Generic;
import java.util.ArrayList;
import java.util.List;
/*
类型通配符
格式:<?>
类型通配符上限
<?extends...>
类型通配符下限
<?super...>
*/
public class Demo05 {
public static void main(String[] args) {
//类型通配符
List<?> l1= new ArrayList <Number>();
List<?> l2=new ArrayList<Object>();
//类型通配符上限
List<?extends Number> l3=new ArrayList<Integer>();
//类型通配符下限
List<?super Number> l4=new ArrayList<Object>();
}
}
4.6 可变参数
package demo10Generic;
import static java.lang.Integer.sum;
/*
可变参数
格式:public static void sum(int... a)
*/
public class Demo06Varable {
public static void main(String[] args) {
System.out.println(sum(10,29));
System.out.println(sum(10,29,44));
System.out.println(sum(10,29,89,107));
System.out.println(sum(10,29,22,32,44,83));
}
public static int sum(int... a){
int num=0;
for(int i:a){
num+=i;
}
return num;
}
}
注:这里的变量是一个数组;多个参数的情况下,可变参数写到后面
4.7 可变参数的使用
package demo10Generic;
import java.lang.reflect.Array;
import java.util.Arrays;
import java.util.List;
import java.util.Set;
/*
可变参数的使用
1.List of
2.Set of
3.asList
*/
public class Demo07 {
public static void main(String[] args) {
//list.of不可增删改
List<String> list1 = List.of("libai", "dufu", "wangchanglin");
//list1.add("lihe");//UnsupportedOperationException
//list1.remove("libai"); //UnsupportedOperationException
//list1.set(1,"dumu");//UnsupportedOperationException
System.out.println(list1);
//set.of不可增删,没有改
Set<String> song = Set.of("xinqiji", "sushi", "liqingzhao");
//song.add("yuefei");//UnsupportedOperationException
//song.remove("xinqiji");//UnsupportedOperationException
System.out.println(song);
//as.List 不可增删,可以改
List<String> xian = Arrays.asList("maodun", "bingxin", "bajin");
//xian.add("moyan");
//xian.remove("maodun");
xian.set(1,"moyan");
System.out.println(xian);
}
}
/*
[libai, dufu, wangchanglin]
[liqingzhao, xinqiji, sushi]
[maodun, moyan, bajin]
*/