(71)泛型定义在类、方法、接口

什么时候定义泛型类?
当类中要操作的引用数据类型不确定时:
早期定义Object来完成拓展,现在定义泛型来完成拓展。
一、下面简单演示不确定要操作学生还是工人时,封装成泛型类

public class Student {

}
public class Worker {

}
public class Tool<T> {
    private T t;

    public T getT() {
        return t;
    }

    public void setT(T t) {
        this.t = t;
    }


}

public class ToolDemo {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        Tool<Worker> t=new Tool<Worker>();
        t.setT(new Worker());
        t.setT(new Student());//编译不能通过
        Worker w=t.getT();//省去了类型转换


    }

}

泛型类定义的泛型,在整个类中有效,如果被方法使用,那么泛型类的对象明确操作的具体类型后,所有要操作的类型已经固定了,只能一种数据类型

二、泛型方法为了让不同方法可以操作不同类型,可以将泛型定义在方法上。
在定义泛型方法时,应该将<>写在返回值的前面、修饰符的后面。(语法规则)

public class Student {

    public <T> void show(T t) {
        System.out.println("show:"+t);
    }
    public <T> void print(T t) {
        System.out.println("print:"+t);
    }
}
public static void main(String[] args) {
        // TODO Auto-generated method stub

        Student stu=new Student();
        //在非泛型类中定义泛型方法,可以不同方法操作不同数据类型
        stu.print("hahah");
        stu.show(new Integer(4));


    }

三、也可以在泛型类中定义非泛型类操作引用类型的泛型方法
泛型类的引用类型为T,在show方法中有效,在print方法中无效

public class Student<T> {

    public void show(T t) {
        System.out.println("show:"+t);
    }
    public <Q> void print( Q q) {
        System.out.println("print:"+q);
    }
}

public class ToolDemo {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        Student<String> stu=new Student<String>();
        stu.show("hahah");
        //可以用不同的引用数据类型
        stu.print(new Integer(4));
        stu.print("heihei");


    }

}

四、特殊之处:静态方法不可以访问类上定义的泛型(静态方法在类加载时就存在,但是此时还没有对象,确定引用数据类型是在创建对象时确定的)。
如果静态方法操作的引用数据类型不确定,可以将泛型定义在方法上
五、也可以定义泛型接口,在实现它的类上要具体明确是哪种引用类型

public interface Inter <T>{
   public abstract void show(T t);
}

public class Student implements Inter<String> {

    public void show(String str) {
        System.out.println("show:"+str);
    }
    public static  <Q> void print( Q q) {
        System.out.println("print:"+q);
    }
}
public class ToolDemo  {

    public static void main(String[] args) {

          Student.print(45);//四
        Student stu=new Student();
        stu.show("hahaha");//五


    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值