java泛型

以下代码的问题

public class GenericTest {

    public static void main(String[] args) {
        List list = new ArrayList();
        list.add("qqyumidi");
        list.add("corn");
        list.add(100);

        for (int i = 0; i < list.size(); i++) {
            String name = (String) list.get(i); // 1
            System.out.println("name:" + name);
        }
    }
}

默认List中存贮Object类型,但是便利的时候,出错,但是却很难发现错误

泛型相当于数学公式的设x,x就是某个类型

默认大家使用:

E – Element (在集合中使用,因为集合中存放的是元素)

T – Type(Java 类)

K – Key(键)

V – Value(值)

N – Number(数值类型)

public class generic_paradigm {
    public static void main(String[] args) {
        Box<String> box = new Box<String>();
        box.setData("30");
        //只可以放入字符串
        
    }
   static class Box<T>{
        //T表示Type 某个变量类型
        T data;
        String str;

        public T getData() {
            return data;
        }

        public String getStr() {
            return str;
        }

        public void setData(T data) {
            this.data = data;
        }

        public void setStr(String str) {
            this.str = str;
        }
    }
}

java源代码中的泛型

List 接口中的泛型:

public interface List<E> extends Collection<E> {

    int size();

    boolean isEmpty();

    boolean contains(Object o);

    Iterator<E> iterator();

    Object[] toArray();

    <T> T[] toArray(T[] a);

    boolean add(E e);

    boolean remove(Object o);

    boolean containsAll(Collection<?> c);

    boolean addAll(Collection<? extends E> c);

    boolean addAll(int index, Collection<? extends E> c);

    boolean removeAll(Collection<?> c);

    boolean retainAll(Collection<?> c);

    void clear();

    boolean equals(Object o);

    int hashCode();

    E get(int index);

    E set(int index, E element);

    void add(int index, E element);

    E remove(int index);

    int indexOf(Object o);

    int lastIndexOf(Object o);

    ListIterator<E> listIterator();

    ListIterator<E> listIterator(int index);

    List<E> subList(int fromIndex, int toIndex);
}

ArrayList实现了List接口

public class ArrayList<E> extends AbstractList<E> 
        implements List<E>, RandomAccess, Cloneable, java.io.Serializable {
    
    public boolean add(E e) {
        ensureCapacityInternal(size + 1);  // Increments modCount!!
        elementData[size++] = e;
        return true;
    }
    
    public E get(int index) {
        rangeCheck(index);
        checkForComodification();
        return ArrayList.this.elementData(offset + index);
    }
    
    //...省略掉其他具体的定义过程

}

 

posted @ 2018-01-22 21:44  式微胡不归  阅读(150)  评论(0编辑  收藏  举报