如何手动将泛型参数传递给方法

时间:2019-04-07 18:51:59

标签: java generics type-inference

我有方法:

public static <T> Stream<T> stream(JSONArray array) {
    return IntStream.range(0, array.length()).mapToObj(i -> {
        try {
            return (T) array.get(i);
        } catch (JSONException e) {
            return null;
        }
    });
}

当我这样称呼它:stream(array).map((JSONObject object) -> { /* ... */ })时,我得到了错误

  

无法推断功能接口类型

而且stream<JSONObject>(array).map(object -> { /* ... */ })不起作用。

stream(array).map(object -> { /* ... */ })有效,但是object仅仅是Object

1 个答案:

答案 0 :(得分:2)

  

而且,stream<JSONObject>(array).map(object -> { /* ... */ })无效。

那是因为您将类型见证人放置在错误的位置。试试:

TheContainingClass.<JSONObject>stream(array).map(object -> { /* ... */ })

但是您的代码输入不安全:未选中对T的强制转换。您只需返回一个Stream<JSONObject>,然后让调用方将类型转换为其他类型即可。