泛型
在定义类或者接口的时候 需要操作数据 但是不清楚使用者那种数据
(定义类 ,接口,变量,方法)
在定义的时候可以使用泛型来代替任意的类型,但是在使用的时候(定义变量,创建对象)必须传递实际类型
泛型类
class Test {
E var1;
}
public class NyClass {
public static void main(String[] args) {
Test test;
new Test();
//创建对象的时候使用变量去保存
//这个时候变量类型需要声明具体类型 new后面可以省略
Test test2 = new Test<>();
test2.var1 = "jack";
System.out.println(test2.var1.getClass());
}
}
泛型接口
类继承一个接口时
1,指定接口的类型
class MyTest implements ITest{
@Override
public void test(String s) {
}
}
public class NyClass {
public static void main(String[] args) {
ITest test = new MyTest<>();
}
// public void t1(){..}
}
2,指定当前类为泛型
class MyTest implements ITest{
@Override
public void test(T t) {
}
}
public class NyClass {
public static void main(String[] args) {
ITest test = new ITest() {
@Override
public void test(String s) {
}
};
}
// public void t1(){..}
}
泛型方法
必须在方法前使用来表示需要使用泛型
class Foo{
public void test(T t) {
System.out.println(t);
}
}
public class NyClass {
public static void main(String[] args) {
Foo foo = new Foo();
ArrayList name = new ArrayList<>();
name.add("jack");
name.add("merry");
foo.test(name);
}
}
? 通配符
当在使用一个泛型时,如果还不确定到底是什么类型,可以使用?来表示任意类型
public void showList(List> list){
for (int i = 0; i
System.out.println(list.get(i));
}
}
public class NyClass {
public static void main(String[] args) {
Foo foo = new Foo();
ArrayList names = new ArrayList<>();
names.add("jack");
names.add("merry");
foo.test(names);
}
}
设置泛型上线
class Milk{
}
class TianyouMilk extends Milk{
}
class Student{
public void eat(T t){
}
}
public class NyClass {
public static void main(String[] args) {
Student xw ;//= new Student<>();
Student zs;
}
}
下线 用super设置
class STest{
public void copy(List src,List super T> dest){
}
}