【问题标题】:Universal Collection for both List and Map?List 和 Map 的通用集合?
【发布时间】:2014-08-20 16:16:42
【问题描述】:

是否有一个通用的集合可以用于 List 和 Map 参数,目的只是检查非空和大小?

现在我有一个具有以下方法的验证类:

// Check if the given List is not null, nor empty
public static <E> boolean listNotNull(List<E> l, boolean checkSize, int size)
{
    // List is null: return false
    if(l == null)
        return false;

    // List is smaller or equal to given size: return false
    if(checkSize && l.size() <= size)
        return false;

    // Everything is OK: return true
    return true;
}

然后我可以这样使用:

if(V.listNotNull(myList, true, 0)){ // if(myList != null && myList.size() > 0){
    // myList is not null, nor empty:
    ...
}

if(V.listNotNull(myList, true, 1)){ // if(myList != null && myList.size() > 1){
    // myList is not null, and has at least 2 items:
    ...
}

if(V.listNotNull(myList, false, 0)){ // if(myList != null){
    // myList is not null, but might still be empty:
    ...
}

我对我的列表使用这种通用验证方法,但在一种方法中我使用 HashMap。有了这个 HashMap,我再次想检查相同的内容(不为空,也不为空):

if(myHashMap != null && myHashMap.size() > 0){
    // myHashMap is not null, nor empty:
    ...
}

是否可以将我的验证方法参数中的List&lt;E&gt; 替换为其他内容(如Collection&lt;???&gt;),所以我同时包含列表和地图?

或者我应该创建一个完全相同的新方法,但是我使用 Map 作为参数而不是 List,如下所示:

// Check if the given Map is not null, nor empty
public static <K, E> boolean mapNotNull(Map<K, E> m, boolean checkSize, int size)
{
    // Map is null: return false
    if(m == null)
        return false;

    // Map is smaller or equal to given size: return false
    if(checkSize && m.size() <= size)
        return false;

    // Everything is OK: return true
    return true;
}

if(V.mapNotNull(myHashMap, true, 0)){ // if(myHashMap != null && myHashMap.size() > 0){
    // myHashMap is not null, nor empty
    ...
}

【问题讨论】:

    标签: java list collections types map


    【解决方案1】:

    不,没有这样的接口或超类。 null 检查当然可以基于 Object 来完成。但是没有与size方法或类似方法的通用接口。

    【讨论】:

    • 好的,除了使用两种分离的方法,我别无选择?编辑:作为回应:“地图不是集合的子接口”。
    • 要么使用 instanceof 和 cast。 (这不会是类型安全的 x.x)
    • 是的,你必须编码两次。您可以将它放在一个采用 Object 参数的方法中,然后在该方法中进行类型检查和强制转换,但我不建议这样做。只需使用两种方法。
    • @KevinCruijssen 不过,您可以为这两种方法使用相同的名称。 Java 应该能够确定使用哪种方法。
    • 另一种选择是传递地图的入口集,即Collection
    猜你喜欢
    • 2014-05-04
    • 2010-12-26
    • 1970-01-01
    • 2017-12-10
    • 1970-01-01
    • 1970-01-01
    • 2011-12-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多