gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 01:49:05 32 4
gpt4 key购买 nike

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

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

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,以便编译器可以通过查看来推断 ofV 类型clazz 的类型。

关于java - 如何指定无界通配符类型参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56766350/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com