簡體   English   中英

java 轉換泛型類型,沒有未經檢查的轉換警告

[英]java cast generic type without unchecked cast warning

我試圖了解如何使用在 java 庫中定義的Function<T,R>接口。 為什么將DoubleIt的實例傳遞給map有效,但傳遞構造函數引用會得到下面的編譯器錯誤,有沒有辦法做到這一點:

編譯器錯誤

import java.util.Arrays;
import java.util.function.Function;
import java.util.stream.Stream;

public class C {
    public static void main(String[] args) {
        final Stream<Integer> stream = Arrays.stream(new Integer[]{2, Integer.MAX_VALUE});

        DoubleIt<Integer, Long> doubleIt = new DoubleIt<>(); 
        stream.map(doubleIt)                     // OK      instance
                .forEach(System.out::println);

        stream.map(DoubleIt<Integer, Long>::new) // error   constructor reference
                .forEach(System.out::println);
    }
}

class DoubleIt<T extends Integer, R extends Long> implements Function<T, R> {

    @Override
    public R apply(T t) {
        @SuppressWarnings("unchecked")
        final R r = (R) Long.valueOf(t.intValue() * 2L);
        return r;
    }
}

第一個傳遞一個DoubleIt實例,另一個傳遞一個構造DoubleIt實例的方法,兩者的簽名非常不同。 為什么您希望它們可以互換?

第一個可以消耗Integer並返回Long ,第二個可以不消耗任何內容並返回DoubleIt 他們做的事情非常不同,因此你不能用一個來代替另一個。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM