Java泛型是什么
导语:泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。那么参数化类型怎么理解呢?让我们了解一下吧!
顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型(类型实参)。
看着好像有点复杂,首先我们看下上面那个例子采用泛型的写法。
1 public class GenericTest {
2
3 public static void main(String[] args) {
4 /*
5 List list = new ArrayList();
6 ("qqyumidi");
7 ("corn");
8 (100);
9 */
10
11 List
12 ("qqyumidi");
13 ("corn");
14 //(100); // 1 提示编译错误
15
16 for (int i = 0; i < (); i++) {
17 String name = (i); // 2
18 tln("name:" + name);
19 }
20 }
21 }
采用泛型写法后,在//1处想加入一个Integer类型的对象时会出现编译错误,通过List
结合上面的泛型定义,我们知道在List
1 public interface List
2
3 int size();
4
5 boolean isEmpty();
6
7 boolean contains(Object o);
8
9 Iterator
10
11 Object[] toArray();
12
13
14
15 boolean add(E e);
16
17 boolean remove(Object o);
18
19 boolean containsAll(Collection c);
20
21 boolean addAll(Collection c);
22
23 boolean addAll(int index, Collection c);
24
25 boolean removeAll(Collection c);
26
27 boolean retainAll(Collection c);
28
29 void clear();
30
31 boolean equals(Object o);
32
33 int hashCode();
34
35 E get(int index);
36
37 E set(int index, E element);
38
39 void add(int index, E element);
40
41 E remove(int index);
42
43 int indexOf(Object o);
44
45 int lastIndexOf(Object o);
46
47 ListIterator
48
49 ListIterator
50
51 List
52 }
我们可以看到,在List接口中采用泛型化定义之后,
自然的,ArrayList作为List接口的实现类,其定义形式是:
1 public class ArrayList
2 implements List
3
4 public boolean add(E e) {
5 ensureCapacityInternal(size + 1); // Increments modCount!!
6 elementData[size++] = e;
7 return true;
8 }
9
10 public E get(int index) {
11 rangeCheck(index);
12 checkForComodification();
13 return entData(offset + index);
14 }
15
16 //...省略掉其他具体的定义过程
17
18 }
由此,我们从源代码角度明白了为什么//1处加入Integer类型对象编译错误,且//2处get()到的类型直接就是String类型了。
-
理解java中的关键字
synchronized关键字,代表这个方法加锁,相当于不管哪一个线程A每次运行到这个方法时,都要检查有没有其它正在用这个方法的线程B(或者CD等),有的话要等正在使用这个方法的线程B(或者CD)运行完这个方法后再运行此线程A,没有的话,直接运行它包括两种用法:synchronized方...
-
Java创建线程的三种方法
导语:编写多线程程序是为了实现多任务的并发执行,从而能够更好地与用户交互。下面是Java创建线程的三种方法,一起来学习下吧:Runnable和Callable的区别(1)Callable规定的方法是call(),Runnable规定的方法是run().(2)Callable的任务执行后可返回值,而Runnable的任务...
-
讲述java中enum的用法
本文实例讲述了java中enum的用法。分享给大家供大家参考。具体分析如下:1.基本用法复制代码代码如下:enumDay{SUNDAY,MONDAY,TUESDAY,WENDSDAY,THURSDAY,FRIDAY,SATURDAY;}枚举是常量,所以应该用大写。2.枚举是对象枚举隐含地继承了,所以它具有的.属性和方法。遍...
-
springmvc如何设置多视图器呢
导语:springmvc如何设置多视图器呢?下面是小编给大家整体的代码,大家可以参考练习,更多详情请关注应届毕业生考试网。在做页面静态化处理时,有时候我们需要两种或者两种以上的视图解析方式,比如jsp,html,json,jstl,ftl等等,显然默认的springmvc只配置一种视图解析方...