Java Generics(泛型)

来源:互联网 发布:淘宝售后电话是多少 编辑:程序博客网 时间:2024/05/25 21:34

Java泛型是JDK 5中引入的一个新特性,允许在定义类和接口的时候使用类型参数。

泛型类

泛型类是我们最经常使用的泛型形式了,如下:

/** * 工具类 * Created by yuedong.li on 12/8/15. */public class ToolsUtil<T> {    /**     * if-else替代     * @param condition 条件     * @param t1 对象1     * @param t2 对象2     * @return 结果     */    public T ifThenElse(boolean condition, T t1, T t2) {        if (condition) {            return t1;        }        return t2;    }}

一个工具类,当前用来代替if-else

使用方法也很简单

public class Main {    public static void main(String[] args) {        double res = new ToolsUtil<Double>().ifThenElse(1 > 2, 1.0, 2.0);        System.out.println(res);    }}

泛型方法

随着需求越来越多,工具类 ToolsUtil 可能需要增加很多的工具类,但是并非其他的方法的参数返回值等都是 T ,我们需要进行粒度调整,这时候就是泛型方法表现的时候了。

/** * 工具类 * Created by yuedong.li on 12/8/15. */public class ToolsUtil {    /**     * if-else替代     * @param condition 条件     * @param t1 对象1     * @param t2 对象2     * @param <T> 类型     * @return 结果     */    public <T> T ifThenElse(boolean condition, T t1, T t2) {        if (condition) {            return t1;        }        return t2;    }    /**     * 检查Email     *     * @param email     *         email     * @return 是否是合法邮件     */    public static boolean checkEmail(String email) {        boolean result = false;        //some code about checking email string        return result;    }}

上面的代码我们使用泛型方法将 ifThenElse 函数的独立出来了,不再必须在创建 ToolsUtil 类时必须指定了。

使用方法依旧相对容易:

public class Main {    public static void main(String[] args) {        double res = new ToolsUtil().ifThenElse(1 > 2, 1.0, 2.0);        System.out.println(res);        boolean checkRes = new ToolsUtil().checkEmail("app@codeboy.me");        System.out.println(checkRes);    }}

可以看出创建 ToolsUtil 的时候不需要再指定类型了,代码看起来清爽了很多。

我们经常将工具类的方法写成静态下,当然泛型方法也是可以的:

/** * 工具类 * Created by yuedong.li on 12/8/15. */public class ToolsUtil {    /**     * 检查Email     *     * @param email     *         email     * @return 是否是合法邮件     */    public static boolean checkEmail(String email) {        boolean result = false;        //some code about checking email string        return result;    }    /**     * if-else替代     * @param condition 条件     * @param t1 对象1     * @param t2 对象2     * @param <T> 类型     * @return 结果     */    public static <T> T ifThenElse(boolean condition, T t1, T t2) {        if (condition) {            return t1;        }        return t2;    }}

使用更加的简洁,操作如下:

public class Main {    public static void main(String[] args) {        double res = ToolsUtil.ifThenElse(1 > 2, 1.0, 2.0);        System.out.println(res);        boolean checkRes = ToolsUtil.checkEmail("app@codeboy.me");        System.out.println(checkRes);    }}

需要注意的一点是 <T> 必须在 修饰词 (public private static final等)和返回值之间

总结

泛型方法在什么时候使用呢?

①类型约束只是在局部

泛型的作用于不是针对全局,而仅仅是针对局部的时候,如 ToolsUtil 类

②静态方法需要处理泛型

如上面例子中的ifThenElse,普通的静态方法是不能使用泛型的。

更多文章请访问小胖轩

0 0
原创粉丝点击