Java

泛型方法

2018-04-23  本文已影响16人  当当一丢丢
主题
泛型方法
/**
 * 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);
        
    }
}
上一篇 下一篇

猜你喜欢

热点阅读