JAVA中的 泛型

一.泛型:本质是将类型参数化

栗子:泛型类

class GeneralType <Type>   //<>里将类型作为参数,  可以用一个泛型类 来构造不同类型的对象
{
  Type object;
  public GeneralTyper(Type object)
  {
    this.object = object;
  }
  public Type getObj()
  {
    return object;
  }
}
public class Test
{
  public static void main(String[] args)
  {
    GeneralType<Integer> i = new GeneralType<Integer> (2); //根据类型实参来确定这一次使用GeneralType类,它的属性是什么类型的
    GeneralType<Double> d = new GeneralType<Double> (0.33);
    System.out.println("i.object=" + (Integer)i.getObj() );
    System.out.println("d.object=" + (Integer)d.getObj() );  //错误! d是double类型来构造的GeneralType对象,它的obj返回的是double对象

  }
}

栗子:泛型方法

class GeneralMethod
{
  <Type> void printClassName(Type object)    //用type作为类型参数  泛型方法让所接收的参数的类型可订制
  {
    System.out.println(object.getClass().getName()); 
  }
}
public class Test
{
  public static void main(String[] args)
  {
    GeneralMethod gm = new GeneralMethod();
    gm.printClassName("hello");
    gm.printClassName(3);
    gm.printClassName(3.0f);
    gm.printClassName(3.0);
  }
}
栗子:使用通配符"?"
class GeneralType <Type>
{
  Type object;
  public GeneralType(Type object)
  {
    this.object = objcet;
  }
  public Type getObj()
  {
    return object;
  }
}
class ShowType
{
  public void show(GeneralType<?> o)   //show方法接收的参数对象,是GeneralType传入的不同的类型实参构造的对象
  {
    System.out.println( o.getObj().getClass().getName() );
  }
}
public class Test
{
  public static void main(String[] args)
  {
    ShowType st = new ShowType();
    GeneralType<Integer> i = new GeneralType<Integer> (2);
    GeneralType<String> s = new GeneralType<String> ("hello");
    st.show(i);    //运行结果: java.lang.Integer
    st.show(s);    //运行结果: java.lang.String
  }
}

二.有限制的泛型

    1.在参数"Type"后面使用"extends"关键字并加上类名或接口名,表明参数所代表的类型必须是该类的子类或者实现了该接口

    2.注意:对于实现了某接口的有限制泛型,也是使用extends关键字,而不是implements关键字

class GeneralType <Type extends Number>    //Type类型必须是Number的子类
{
  Type object;
  public GeneralType(Type object)
  {
    this.object = objcet;
  }
  public Type getObj()
  {
    return object;
  }
}
public class Test
{
  public static void main(String[] args)
  {
    GeneralType<Integer> i = new GeneralType<Integer> (2);
    GeneralType<String> s = new GeneralType<String> ("hello");   //错误!String不是Number的子类
  }
}



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值