我有方法:
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
并且,
stream<JSONObject>(array).map(object -> { /* ... */ })
不起作用。
那是因为你把类型见证放在了错误的地方。尝试:
TheContainingClass.<JSONObject>stream(array).map(object -> { /* ... */ })
但是你的代码不是类型安全的:对T
的强制转换是未经检查的。你应该简单地返回一个Stream<JSONObject>
,让调用者处理其他类型的转换。