如何指定无界通配符类型参数?

How can I specify an unbounded wildcard type parameter?

我无法为问题选择正确的词。

我有一个 class 和一个工厂方法。

class MyObject<Some, Other> {

    static <T extends MyObject<U, V>, U, V> T of(
            Class<? extends T> clazz, U some, V other) {
        // irrelevant 
    }

    private Some some;

    private Other other;
}

现在我想再添加两个工厂方法,每个只需要 UV

应该是这样的。这意味着省略的 VU 仍未设置 (null).

static <T extends MyObject<U, ?>, U> T ofSome(
        Class<? extends T> clazz, U some) {
    // TODO invoke of(clazz, some, @@?);
}

static <T extends MyObject<?, V>, V> T ofOther(
        Class<? extends T> clazz, V other) {
    // TODO invoke of(clazz, @@?, other);
}

我试过了,但没有成功。

static <T extends MyObject<U, ?>, U> T ofSome(
        final Class<? extends T> clazz, final U some) {
    return of(clazz, some, null);
}

编译器抱怨以下消息。

no suitable method found for of(java.lang.Class,U, <nulltype>)

正确的做法是什么?

您仍然需要通用参数 V,只是不需要方法参数 V

static <T extends MyObject<U, V>, U, V> T ofSome(
        final Class<? extends T> clazz, final U some) {
    return of(clazz, some, null);
}

您需要 ofSome 中的 V 以便编译器可以通过查看 clazz 的类型推断 ofV 类型。