泛型方法

作者: 当当一丢丢 | 来源:发表于2018-04-23 00:32 被阅读16次
主题
  • 本节主要讲解泛型方法
泛型方法
  • 泛型是反面向对象的一种性质(anti-oop)
  • 本质上是abstract(请允许我这里用了一个"抽取"的概念)多种类型间的通用操作,这是一个自底向上抽取的过程
  • 这种通用操作的概念比接口更广泛,开句玩笑,接口可以是跨越性别谈恋爱,而泛型更广泛到跨越种族
  • 关键点:
    1)接口的特性是定义公共行为,即多个实现类实现相同接口方法
    2)泛型同样需要所有将要作为类型参数的类具有某个些共同方法,泛型它才能"提纲挈领"式的"抽取"公共方法
    3)这种公共方法(泛型中"抽取"的)若在没有使用到泛型之 extentds 关键字的时候,大部分是以 Object 中定义的方法来体现当,使用了 extends AA 关键字后,则体现在AA 定义的公共方法上
    4)泛型对开发者最有价值的还是体现在 extends 关键字的使用时,此刻可以让用户来定义一个公共边界
  • 定义泛型方法
/**
 * Created by Dangdang on 2018/4/10.
 */
public class GenericMethod {

    //需求1:给所有类的 toString 结果前后添加 @ 符号,即 @test@
    public static <T> String show(T t) {
        //t.toString() 方法是所有类型都具有的公共方法, Object 中定义
        //这里我们在泛型方法中借其定义更加公共的通用方法
        String result = "@" + t.toString() + "@";
        System.out.println(result);
        return result;
    }

    //需求2:计算实现IArea 接口的图形的面积, 用 extends 指定类型上限
    public static <T extends IArea> Double getArea(T t) {
        //公共方法来源于 上限类中,此处是IArea 接口定义的方法
        //若不指定 extends getArea() 方法是找不到的
        //用组合方法也可以实现该需求,引入一个IArea 接口
        return t.getArea();
    }

}

针对 需求2 需定义如下代码

//定义公共接口,此刻更体现在边界的概念上,供 extends 使用
public interface IArea {
    
    Double getArea();
}

定义实现类

/**
 * Created by Dangdang on 2018/4/10.
 * 定义实现公共接口的具体类
 */
public class Circle implements IArea {

    private Integer radius;

    public Circle(Integer radius) {
        this.radius = radius;
    }

    //实现公共方法
    @Override
    public Double getArea() {
        double area = Math.PI * radius * radius;
        System.out.println(area);
        return area;
    }

   getter
   setter
}

public class Rectangle implements IArea {

    private Double width;

    private Double height;

    public Rectangle(Double width, Double height) {
        this.width = width;
        this.height = height;
    }

    @Override
    public Double getArea() {
        double area = width * height;
        System.out.println(area);
        return area;
    }

   getter
   setter
}

定义test

public class GenericMethodDemo {

    public static void main(String[] args) {

        //泛型方法测试,无 extends
        String a = "lisi";
        Integer b = 4;
        Date date = new Date();

        GenericMethod.show(a);

        GenericMethod.show(b);

        GenericMethod.show(date);

        System.out.println("...............");

        //泛型方法测试,无 extends
        Circle circle = new Circle(3);
        
        Rectangle rectangle = new Rectangle(new Double(2.0), new Double(3.0));

        //泛型方法,传入任意实现 IArea 接口的类
        GenericMethod.getArea(circle);
        GenericMethod.getArea(rectangle);
        
    }
}

相关文章

  • Java 泛型

    泛型类 例如 泛型接口 例如 泛型通配符 泛型方法 类中的泛型方法 泛型方法与可变参数 静态方法与泛型 泛型上下边...

  • 泛型的使用

    泛型有三种使用方式,分别为:泛型类、泛型接口、泛型方法 泛型类 泛型接口 泛型通配符 泛型方法 静态方法与...

  • Java泛型

    泛型有三种实现方式,分别是泛型接口、泛型类、泛型方法。下面通过泛型方法来介绍什么是类型参数。 泛型方法声明方式:访...

  • 重走安卓进阶路——泛型

    ps.原来的标题 为什么我们需要泛型? 泛型类、泛型接口和泛型方法(泛型类和泛型接口的定义与泛型方法辨析); 如何...

  • JAVA泛型

    泛型方法 泛型类

  • 三泛型的使用

    1.泛型类和泛型方法 (1)格式 (2)示例例如a.泛型类 b.实现方法 2.泛型接口和泛型方法 (1)格式 (2...

  • 泛型

    一、泛型类、泛型接口和泛型方法1、泛型接口的定义: 2、两种泛型类的定义:(1) (2) 3、泛型方法的定义,可以...

  • 泛型 & 注解 & Log4J日志组件

    掌握的知识 : 基本用法、泛型擦除、泛型类/泛型方法/泛型接口、泛型关键字、反射泛型(案例) 泛型 概述 : 泛型...

  • 泛型

    泛型类 是在实例化类的时候指明泛型的具体类型 泛型方法 是在调用方法的时候指明泛型的具体类型 泛型方法中是用...

  • 泛型

    关于泛型类,泛型方法,泛型接口泛型类:public class FanXingLeiDemo {//这里是泛...

网友评论

    本文标题:泛型方法

    本文链接:https://www.haomeiwen.com/subject/dvahlftx.html