Как вручную передать универсальный параметр в метод - PullRequest
0 голосов
/ 07 апреля 2019

У меня есть метод:

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 Ответ

2 голосов
/ 07 апреля 2019

И, stream<JSONObject>(array).map(object -> { /* ... */ }) не работает.

Это потому, что вы поместили свидетеля в неправильное место.Попробуйте:

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

Но ваш код небезопасен: приведение к T не проверено.Вы должны просто вернуть Stream<JSONObject> и позволить вызывающей стороне обрабатывать приведение к другим типам.

...