如何在不丢失其类型的情况下将rxjava Zip函数(从Single / Observable)的泛型推广到n个可选参数?

Related to this question https://stackoverflow.com/questions I want to achieve the same in Java with rxJava2:

假设您有一个很长的arar函数:

import io.reactivex.annotations.NonNull;

public interface Function11<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, R> {
    @NonNull
    R apply(@NonNull T1 var1, @NonNull T2 var2, @NonNull T3 var3, @NonNull T4 var4, @NonNull T5 var5, @NonNull T6 var6, @NonNull T7 var7, @NonNull T8 var8, @NonNull T9 var9, @NonNull T10 var10, @NonNull T11 var11) throws Exception;
}

使用该接口的函数:

Function11<String, Integer, Optional<Integer>, String, String, String, String, String, String, String, String, String> f = (s, i1, i2, s2, s3, s4, s5, s6, s7, s8, s9) -> "".join("-", s, "i" + i1.toString(), "i" + i2.orElse(5).toString(), s2, s3, s4, s5, s6, s7, s8, s9);

您需要的参数来自以下来源:

Single<String> singleString1 = Single.just("s1");
Single<Integer> singleOne = Single.just(1);
Optional<Single<Integer>> singleOptionalTwo = Optional.of(Single.just(2));
Single<String> singleString2 = Single.just("s2");
Single<String> singleString3 = Single.just("s3");
Single<String> singleString4 = Single.just("s4");
Single<String> singleString5 = Single.just("s5");
Single<String> singleString6 = Single.just("s6");
Single<String> singleString7 = Single.just("s7");
Single<String> singleString8 = Single.just("s8");
Single<String> singleString9 = Single.just("s9");

然后使用zipArray函数:

    Single.zipArray(
            (Object[] array) ->
                    function11(
                            (String) array[0],
                            (Integer) array[0],
                            (Optional<Integer>) array[0],
                            (String) array[0],
                            (String) array[0],
                            (String) array[0],
                            (String) array[0],
                            (String) array[0],
                            (String) array[0],
                            (String) array[0],
                            (String) array[0],
                            (String) array[0]
                    )
            ,
            singleString1,
            singleOne,
            singleString2,
            singleString2,
            singleString3,
            singleString4,
            singleString5,
            singleString6,
            singleString7,
            singleString8,
            singleString9

    );

如您所见,有几个错误:

  • 不良铸造
  • 错误的参数索引
  • 运行时键入错误

How can I fix those errors? What if one of them is Optiona<Single<String>>?