泛型:任意的類型
在定義類或者接口的時(shí)候 需要操作數(shù)據(jù) 但是不清楚使用者需要哪種數(shù)據(jù)
定義類器钟、接口崇裁、變量哀澈、方法
在定義的時(shí)候可以使用泛型來代表任意的類型滓窍,但在使用的時(shí)候(定義變量与帆、創(chuàng)建對(duì)象)必須傳遞實(shí)際類型
創(chuàng)建對(duì)象的時(shí)候使用變量去保存對(duì)象了赌,這個(gè)時(shí)候變量類型需要聲明具體類型 new后面可以省略
MyClass.java
import java.util.Collection
//泛型類
class Test<E>{
E var1;
}
//泛型接口
interface ITest<T>{
void test(T t);
}
//類繼承一個(gè)接口時(shí)
//方法一:指定接口的類型
//class MyTest implements ITset<String>{
// @Override
// public void test(String s) {
//
// }
//}
//方法二:指定當(dāng)前類為泛型
class MyTest<T> implements ITest<T>{
@Override
public void test(T t) {
}
}
//泛型方法
//必須在方法前使用<T>來表示需要使用泛型
class Foo{
public<T> void test(T t){
System.out.println(t);
}
public void showList(List<?> list){
for (int i = 0; i < list.size(); i++){
System.out.println(list.get(i));
}
}
}
//Child cd;
//Father f = cd;
//注意Java的集合類型是不會(huì)自動(dòng)變型 List<Child> List<Father>
//? 通配符
//在使用一個(gè)泛型時(shí),如果還不確定到底是什么類型玄糟,可以使用勿她?來表示任意類型
//List<String> -> List<Object>
//設(shè)置泛型的上限 extends
class Cat{
}
interface IFood{
}
class Milk implements IFood{
}
class TianyouMilk extends Milk{
}
//指定傳遞過來的類型的父類必須是IFood
class Student<T extends IFood> {
public void eat(T t){
}
}
public class MyClass {
public static void main(String[] args){
}
public void t4(){
Student<Milk> xw;
Student<TianyouMilk> zs;
//Student<Cat> zt;
}
public void t3(){
//Foo foo = new Foo();
//new ArrayList<String> names = new ArrayList<>();
//names.add("jack");
//names.add("merry");
//foo.test(t: );
Foo foo = new Foo();
List<String> names = new ArrayList<>();
names.add("jack");
names.add("merry");
foo.showList(names);
}
public void t2(){
//ITest<String> test = new MyTest<>();
//使用匿名內(nèi)部類對(duì)象
ITest<List<String>> test = new ITest<List<String>>() {
@Override
public void test(List<String>strings) {
}
};
}
public void t1(){
//在使用的時(shí)候(定義變量、創(chuàng)建對(duì)象)必須傳遞實(shí)際類型
Test<String> test;
new Test<String>();
//創(chuàng)建對(duì)象的時(shí)候使用變量去保存對(duì)象
//這個(gè)時(shí)候變量類型需要聲明具體類型 new后面可以省略
Test<String> test2 = new test<>();
test2.var1 = "jack";
System.out.println(test2.var1.getClass());
}
}