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

问题描述 投票:0回答:1

我有方法:

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

java generics type-inference
1个回答
2
投票

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

那是因为你把类型见证放在了错误的地方。尝试:

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

但是你的代码不是类型安全的:对T的强制转换是未经检查的。你应该简单地返回一个Stream<JSONObject>,让调用者处理其他类型的转换。

© www.soinside.com 2019 - 2024. All rights reserved.