1

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

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

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;
}

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

那将是这样的。这意味着那些被忽略的V,或者U仍然是未设置的(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);
}

编译器抱怨以下消息。

没有为 of(java.lang.Class,U, <nulltype>) 找到合适的方法

正确的方法是什么?

4

1 回答 1

2

您仍然需要泛型参数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);
}

您需要VinofSome以便编译器可以V通过of查看clazz.

于 2019-06-26T06:30:27.720 回答