zoukankan      html  css  js  c++  java
  • 周末学习-泛型-就是传入什么类型就是什么类型-花了一个半小时

    class Boy{ //男演员实体类
    //姓名
    public String mName;
    //身高
    public int mHeight;

    public Boy(String name, int height) {
    this.mName = name;
    this.mHeight = height;
    }
    public Boy(){
    }

    }

    //演员选拔类
    class Compare{ //即使不继承boy类,还是可以用变量mHeight
    public Boy WhoIsBetter(Boy boy1, Boy boy2){
    if (boy1.mHeight > boy2.mHeight){
    return boy1;
    }
    else{
    return boy2;
    }
    }
    }


    //测试
    public class test{
    public static void main (String args[]){
    Boy boy1 = new Boy("潘长江", 165);
    Boy boy2 = new Boy("刘德华", 175);
    Compare a= new Compare() ;
    System.out.println(a.WhoIsBetter(boy1, boy2).mName);
    }
    }输出刘德华
    /*结果选出了身高更高的刘德华,选出了体重更轻的周迅,导演很满意。但从程序设计角度,
    * 这段代码显然不够完美,第一天选男主角,第二天选女主角,往后还要选男配角,
    * 选女配角,选群众......按目前方式,只有往Compare类里不断添加方法才能
    * 满足导演需求,方法会越来越多,代码会越来越长。
    * 于是,我决定修改WhoIsBetter方法,让它以后可以支持男主,女主,男配,女配,
    * 男群众,女群众甚至支持所有两个对象 */

    package src;


    class Boy{ //男演员实体类
    //姓名
    public String mName;
    //身高
    public int mHeight;

    public Boy(String name, int height) {
    this.mName = name;
    this.mHeight = height;
    }
    public Boy(){
    }
    }

    class Girl{
    //姓名
    public String wName;
    //体重
    public int wWeight;

    public Girl(String name, int weight){
    this.wName = name;
    this.wWeight = weight;
    }

    }

    class Compare<Type> {
    public<Type extends Comparable> Type WhoIsBetter(Type t1, Type t2){//就像C++中那样传入什么类型,就是什么类型
    if (t1.compareTo(t2)>0){
    return t1;
    }
    else{
    return t2;
    }
    }
    }


    /*
    * 因为,在编译之前,也就是我们还在定义这个泛型方法的时候,我们并不知道这个泛型类型T,
    * 到底是什么类型,所以,只能默认T为原始类型Object。所以它只能调用来自于Object的
    * 那几个方法,而不能调用compareTo方法。
    *可我的本意就是要比较t1和t2,怎么办呢?这个时候,就要使用类型限定,对类型变量T设置限定(bound)
    *来做到这一点。
    public T compare(T t1,T t2) { //添加类型限定
    if(t1.compareTo(t2)>=0);
    return t1;
    }
    */

    public class test1{
    public static void main (String args[]){
    Boy boy1 = new Boy("潘长江", 165);
    Boy boy2 = new Boy("刘德华", 175);
    Compare<Boy> a= new Compare<Boy>() ;
    System.out.println(a.WhoIsBetter(boy1.mHeight, boy2.mHeight));

    Girl girl1 = new Girl("巩俐", 120);
    Girl girl2 = new Girl("周迅", 80);
    Compare<Girl> b= new Compare<Girl>() ;
    System.out.println(b.WhoIsBetter(girl1.wWeight , girl2.wWeight));

    }
    }

    //175
    //120

  • 相关阅读:
    多线程(一)高并发和多线程的关系
    spring源码浅析——IOC
    网络爬虫(java)
    数据结构—平衡二叉树
    设计模式—抽象工厂模式
    设计模式—工厂方法模式
    scala(二) Future执行逻辑解读
    java异常处理机制
    为什么覆写equals必须要覆写hashCode?
    Scala对MongoDB的增删改查操作
  • 原文地址:https://www.cnblogs.com/cs-lcy/p/6618421.html
Copyright © 2011-2022 走看看