Java泛型方法调用

时间:2014-06-03 09:21:40

标签: java generics

请考虑以下代码:

public class MainClass {
    public static void main(String[] args) {
        ArrayList<HashMap<String, Integer>> collection = new ArrayList<>();
        ArrayList<HashMap<String, Integer>> outCollecttion = <String, Integer, HashMap<String, Integer>, ArrayList<HashMap<String, Integer>>>doSomeWork(collection);
    }

    public static <V extends Object, U extends Object, K extends Map<V, U>, J extends Collection<K>> Collection<K> doSomeWork(J collection) {
        Collection<K> result = new ArrayList<>();

        for (K element : collection) {
            result.add(element); //here is supposed other code, this is just example
        }

        return result;
    }
}

我想对包含一些泛型类型的地图的泛型集合做一些工作。我知道Java很难找到复杂的泛型表达式,所以我在方法调用之前放置了显式类型:

<String, Integer, HashMap<String, Integer>, ArrayList<HashMap<Integer, String>>>doSomeWork(collection)

但是编译器不会编译它。我确实理解它可能与我试图在泛型类型中使用泛型类型这一事实有关,但我不知道如何在不使用强制转换的情况下编写此方法而不是弃用警告(我通常使用 - 编译) Xlint:unchecked flag)。

2 个答案:

答案 0 :(得分:1)

首先,当您想要显式提供类型参数时,您必须从其类中调用该方法:

... = MainClass.<String, Integer, HashMap<String, Integer>, ArrayList<HashMap<String, Integer>>>doSomeWork(collection);

其次,您的方法返回Collection<K>,但变量声明为ArrayList<...>。以下适用于我:

Collection<HashMap<String, Integer>> outCollecttion = ...

答案 1 :(得分:0)

您不需要在作业中使用泛型。

Collection<HashMap<String, Integer>> outCollecttion = doSomeWork(collection);