JAVA编程技巧(三)

三、利用泛型

3.1. 泛型接口

在 Java 没有引入泛型前,都是采用 Object 表示通用对象,最大的问题就是类型无法强校验并且需要强制类型转换。

普通:

public interface Comparable {
    public int compareTo(Object other);
}
 
@Getter
@Setter
@ToString
public class UserVO implements Comparable {
    private Long id;
 
    @Override
    public int compareTo(Object other) {
        UserVO user = (UserVO)other;
        return Long.compare(this.id, user.id);
    }
}

精简:

public interface Comparable<T> {
    public int compareTo(T other);
}
 
@Getter
@Setter
@ToString
public class UserVO implements Comparable<UserVO> {
    private Long id;
 
    @Override
    public int compareTo(UserVO other) {
        return Long.compare(this.id, other.id);
    }
}

3.2. 泛型类

普通:

@Getter
@Setter
@ToString
public class IntPoint {
    private Integer x;
    private Integer y;
}
 
@Getter
@Setter
@ToString
public class DoublePoint {
    private Double x;
    private Double y;
}

精简:

@Getter
@Setter
@ToString
public class Point<T extends Number> {
    private T x;
    private T y;
}

3.3. 泛型方法

普通:

public static Map<String, Integer> newHashMap(String[] keys, Integer[] values) {
    // 检查参数非空 
    if (ArrayUtils.isEmpty(keys) || ArrayUtils.isEmpty(values)) {
        return Collections.emptyMap();
    }
 
    // 转化哈希映射 
    Map<String, Integer> map = new HashMap<>();
    int length = Math.min(keys.length, values.length);
    for (int i = 0; i < length; i++) {
        map.put(keys[i], values[i]);
    }
    return map;
}

精简:

public static <K, V> Map<K, V> newHashMap(K[] keys, V[] values) {
    // 检查参数非空 
    if (ArrayUtils.isEmpty(keys) || ArrayUtils.isEmpty(values)) {
        return Collections.emptyMap();
    }
 
    // 转化哈希映射 
    Map<K, V> map = new HashMap<>();
    int length = Math.min(keys.length, values.length);
    for (int i = 0; i < length; i++) {
        map.put(keys[i], values[i]);
    }
    return map;
}
正文完
 0
admin
版权声明:本站原创文章,由 admin 2015-12-20发表,共计1498字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处:https://www.mlzj.net。