1. 为什么使用泛型
2. 在集合中使用泛型
package org
.example
;
import org
.junit
.Test
;
import java
.util
.*
;
public class GenericTest {
@Test
public void test1() {
ArrayList list
= new ArrayList();
list
.add(33);
list
.add(44);
list
.add(77);
list
.add(88);
list
.add("Tom");
for (Object score
: list
) {
int stuScore
= (int) score
;
}
}
@Test
public void test2() {
ArrayList
<Integer> list
= new ArrayList<>();
list
.add(33);
list
.add(44);
list
.add(77);
list
.add(88);
for (Integer score
: list
) {
int stuScore
= score
;
}
Iterator
<Integer> iterator
= list
.iterator();
while (iterator
.hasNext()) {
System
.out
.println(iterator
.next());
}
}
@Test
public void test3() {
Map
<String, Integer> map
= new HashMap<String, Integer>();
map
.put("Tom", 88);
map
.put("Jack", 55);
map
.put("Sam", 78);
map
.put("Amy", 54);
Set
<Map
.Entry
<String, Integer>> entries
= map
.entrySet();
Iterator
<Map
.Entry
<String, Integer>> iterator
= entries
.iterator();
while (iterator
.hasNext()) {
Map
.Entry
<String, Integer> next
= iterator
.next();
System
.out
.println(next
.getKey() + "=" + next
.getValue());
}
}
}
3. 自定义泛型结构
自定义泛型类或接口
public class Order<T> {
String orderName
;
int orderId
;
T orderT
;
public Order() {
T
[] arr
= (T
[]) new Object[10];
}
public Order(String orderName
, int orderId
, T orderT
) {
this.orderName
= orderName
;
this.orderId
= orderId
;
this.orderT
= orderT
;
}
public T
getOrderT() {
return orderT
;
}
}
public class SubOrder extends Order<Integer> {
}
public class SubOrder1<T> extends Order<T> {
}
package org
.example
;
import org
.junit
.Test
;
import java
.util
.ArrayList
;
public class GenericTest1 {
@Test
public void test1() {
Order
<String> order
= new Order<>();
}
@Test
public void test2() {
SubOrder subOrder
= new SubOrder();
SubOrder1
<String> subOrder1
= new SubOrder1<>();
}
@Test
public void test3() {
ArrayList
<Integer> list1
= new ArrayList<>();
ArrayList
<String> list2
= new ArrayList<>();
}
}
自定义泛型方法
public <E> List
<E> copyFromArrayToList(E
[] arr
) {
ArrayList
<E> list
= new ArrayList<>();
for (E e
: arr
) {
list
.add(e
);
}
return list
;
}
@Test
public void test4() {
Integer
[] arr
= new Integer[]{1, 2, 3, 4};
List
<Integer> list
= copyFromArrayToList(arr
);
System
.out
.println(list
);
}
4. 泛型在继承上的体现
package org
.example
.java2
;
import org
.junit
.Test
;
import java
.util
.ArrayList
;
import java
.util
.List
;
public class GenericTest {
@Test
public void test1() {
Object
[] arr1
= null
;
String
[] arr2
= null
;
arr1
= arr2
;
List
<Object> list1
= null
;
List
<String> list2
= null
;
}
@Test
public void test2() {
List
<String> list1
= null
;
ArrayList
<String> list2
= null
;
list1
= list2
;
}
}
5. 通配符的使用
package org
.example
.java2
;
import org
.junit
.Test
;
import java
.util
.ArrayList
;
import java
.util
.Iterator
;
import java
.util
.List
;
public class GenericTest1 {
@Test
public void test1() {
List
<Object> list1
= new ArrayList<>();
List
<String> list2
= new ArrayList<>();
List
<?> list
= null
;
list
= list1
;
list
= list2
;
List
<String> list3
= new ArrayList<>();
list3
.add("AA");
list3
.add("BB");
list3
.add("CC");
list
= list3
;
Object o
= list
.get(0);
}
public void print(List
<?> list
) {
Iterator
<?> iterator
= list
.iterator();
while (iterator
.hasNext()) {
Object obj
= iterator
.next();
System
.out
.println(obj
);
}
}
}
有限制条件的通配符
public class Person {
}
public class Student extends Person {
}
@Test
public void test2() {
List
<? extends Person> list1
= null
;
List
<? super Person
> list2
= null
;
List
<Student> list3
= null
;
List
<Person> list4
= null
;
List
<Object> list5
= null
;
list1
= list3
;
list1
= list4
;
list2
= list4
;
list2
= list5
;
Person person
= list1
.get(0);
Object object
= list2
.get(0);
list2
.add(new Person());
list2
.add(new Student());
}
转载请注明原文地址:https://blackberry.8miu.com/read-17666.html