// 定义接口时指定泛型:E,E类型在接口中就可以作为类型使用
public interface List extends Collection{
……
boolean add(E e);
Iterator iterator();
……
}
// 定义接口时指定泛型:K 和 V,K和V类型在接口中就可以作为类型使用
public interface Map{
……
Set keySet();
Collection values();
Set> entrySet();
……
}
使用泛型接口:List接口的泛型类型E,在使用时指定为具体类型String
public static void main(String[] args) {
List list = new ArrayList<>();
// 指定泛型类型E=String
list.add("我只认识字符串");
//boolean add(E e);
等价于boolean add(String e);
Iterator iterator = list.iterator();
//Iterator iterator();
while (iterator.hasNext()){
String next = iterator.next();
//不需要强转为String
System.out.println(next);
}
}
关于泛型接口Map 集合怎么用,就自行编写感受下。
2.2.泛型类
普通泛型类
定义泛型类
public class DemoFx {
private D dd;
public D getDd(){
return this.dd;
}
public void setDd(D dd){
this.dd = dd;
}
}
使用泛型类
public static void main(String[] args) {
DemoFx stringDemoFx = new DemoFx<>();
stringDemoFx.setDd("我是字符串类型");
System.out.println(stringDemoFx.getDd());
}
泛型类的继承与实现
定义泛型类:以ArrayList 类为例,继承泛型抽象类和实现泛型接口:
public class ArrayList extends AbstractList
implements List, RandomAccess, Cloneable, java.io.Serializable{
……
public E get(int index) {
rangeCheck(index);
return elementData(index);
}
……
}
使用泛型类
public static void main(String[] args) {
List list = new ArrayList();
// 指定泛型类型E=String
list.add("我只认识字符串");
String s = list.get(0);
// 返回值为String
}
2.3.泛型方法
定义泛型方法:还是ArrayList案例
public class ArrayList extends AbstractList
implements List, RandomAccess, Cloneable, java.io.Serializable{
……
public T[] toArray(T[] a) {
if (a.length < size)
// Make a new array of as runtime type, but my contents:
return (T[]) Arrays.copyOf(elementData, size, a.getClass());
System.arraycopy(elementData, 0, a, 0, size);
if (a.length > size)
a[size] = null;
return a;
}
……
}
使用泛型方法:public T[] toArray(T[] a)
public static void main(String[] args) {
List list = new ArrayList();
list.add("s1");
list.add("s2");
list.add("sn");
// public T[] toArray(T[] a)
String[] strings = list.toArray(new String[list.size()]);
System.out.println(Arrays.asList(strings));
}
// 通配符定义
public void foreach(List> list){
for (int i =0 ;
i void foreach2(List list){
for(T t : list){
System.out.println(t.toString());
}
}
// 使用
public static void main(String[] args) {
List list = new ArrayList();
list.add("s1");
list.add("s2");
list.add("sn");
Demo demo = new Demo();
demo.foreach(list);
// 通配符
demo.foreach2(list);
// 泛型
}