泛型

package Genericity;

public class Test {
public static void main(String[] args) {
A a1 = new A(); //在new A的对象指定泛型的类型string
a1.setKey(“xxxx”); //对象使用sexKey(σ key)方法, 中的ey形参就是String
a1.getKey();//T getKey(), 返回值就有new对象确定返回值是string
//同样的类,但是在new对象时泛型指定不同的数据类型,这些对象不能互相赋值
A a2 = new A();
}
}
/**

  •  泛型定义
    
  •  自定义泛型类
    
  • @param 可以随意起名一般使用大写
  •      一般使用T 意type
    

*/
class A {
private T key;
public void setKey(T key){
this.key=key;
}
public T getKey (){
return this.key;
}
}

package Genericity;

public class Test2 {
public static void main(String[] args) {
// B1 b1 = new B1(); //接口没有声明泛型实例的时候需要声明
// B2 b2 = new B2(); // 接口声明过泛型实例的时候就不需要声明了
Cc c = new Cc();
//泛型方法,在调用之前没有固定的数据类型
//在调用时,传入的参数是什么类型,就会把泛型改成什么类型
c.test(“Xxxx”);
c.test1(2); //传递的参数是Integer,泛型就固定成Integer, 返回值就是Integer
c.test1(true);
}
}
interface IB {
T test(T t);
}

/**

  • 未传入泛型实参时,与泛型类的定义相同,

  • 在声明类的时候,需将泛型的声明也一起加到类中

  • @param
    */
    class B1 implements IB {

    @Override
    public T test(T t) {
    return t;
    }
    }

/**

  • 如果实现接口时指定接口的泛型的具体数据类型

  • 这个类实现接口所有方法的位置都要泛型替换实际的具体数据类型
    */
    class B2 implements IB {

    @Override
    public String test(String t) {
    return t;
    }
    }

/**

  • 泛型方法定义
    */
    class Cc {
    private E e ;
    public static void test3(T t){
    //在静态方法中,不能使用类定义泛型,如果要使用泛型,只能使用静态方法自己定义的泛型
    System.out.println(t);
    }

    public void test (T s){ //无返回值的泛型方法
    //在类上定义的泛型,可以在普通的方法中使用
    System.out.println(this.e);
    T t = s;
    }
    public T test1 (T s){ // 有返回值的泛型方法
    return s;
    }
    public void test2 (T… t){ //可变参数的泛型方法
    for(T tt : t){
    System.out.println(tt);
    }
    }

}

package Genericity;

import java.util.ArrayList;
import java.util.List;

public class Test3 {
public static void main(String[] args) {
Dd d = new Dd();
d.test(new ArrayList());
d.test(new ArrayList());
//extends 的
d.test1(new ArrayList());
d.test1(new ArrayList());
//super的
d.test2(new ArrayList());
d.test2(new ArrayList());
d.test2(new ArrayList());
//IAimpl IA 接口
d.test3(new ArrayList());

}

}
class Dd {
public void test (List<?> list){ //test方法需要一个1ist集合的参数,不确定Iist集合到底是存的数的类型是什么

}
public  void test1(List<? extends C1> list){//list参数的元素数据类型是c1及其子类
}
public  void test2(List<? super C1> list){//list参数的元素数据类型是c1及其父类
}
public  void test3(List<? extends IAimpl > list){ //list参数的元素数据类型是IA的实现类

}

}

class A1{}

class B11 extends A1{}

class C1 extends B11{}

class D1 extends C1{}

interface IA{}

class IAimpl implements IA {

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值